【问题标题】:Losing encoding when opening and saving a file打开和保存文件时丢失编码
【发布时间】:2012-01-14 11:01:19
【问题描述】:

我正在尝试使用常规 HTML 和特殊 Unicode 字符(例如“ÖÄÅ öäå”(瑞典语))打开文件,对其进行格式化,然后将其输出到文件中。

到目前为止,一切都很好,我可以打开文件,找到我需要的部分并输出到文件中。

但重点是:

我无法在不丢失编码的情况下将输入的 Unicode 数据保存到文件中(例如,'ö' 变为 'ö')。

虽然我可以通过手动将它们输入代码本身来管理执行正则表达式并将它们输出到正确的编码。但不是在我导入文件、格式​​化然后输出时。

使用OCT时的工作方法示例(例如,这可以输出到文件而没有编码问题):

my $charsSWE = "öäåÅÄÖ";
# \344 = ä
# \345 = å
# \305 = Å
# \304 = Ä
# \326 = Ö
# \366 = ö
my $SwedishLetters = '\344 \345 \305 \304 \326 \366';

if($charsSWE =~ /([$SwedishLetters]+)/){
    print "Output: $1\n";
}

下面的方法不起作用,因为编码丢失了(这是代码部分的快速说明,但它的概念是相同的[例如打开文件,获取和输出]):

open(FH, 'swedish.htm') or die("File could not be opened");

    while(<FH>)
    {
        my @List =  /([$SwedishLetters]+)/g;    
        message($List[0]) if @List;
    }

close(FH);

【问题讨论】:

  • 什么格式被破坏了?您正在丢失空格?
  • 不,我的意思是我的角色失去了他们的“真实形态”,例如 ö 变成了 ö 等等。

标签: perl unicode encoding


【解决方案1】:
use Encode;

open FILE1, "<:encoding(UTF-8)", "swedish.htm" or die $!;

#do stuff

open FILE2, ">:encoding(UTF-8)", "output.htm" or die $!;

您可能需要使用不同的编码。

【讨论】:

  • "
  • 如果输入是从实际的瑞典网页中抓取的,则编码可能是 UTF-8 或 ISO-8859-1。
  • @Alexander 这只是一个让你前进的例子:)。很高兴为您提供帮助!
  • use utf8 在那里没有任何用处。所有这些模块都是为了告诉 perl 你的源代码中有 utf8 字符 - 这里不是这种情况。见metacpan.org/module/utf8
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多