perl - 打开和保存文件时丢失编码

标签 perl unicode encoding

我正在尝试打开一个包含常规 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);

最佳答案

use Encode;

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

#do stuff

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

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

关于perl - 打开和保存文件时丢失编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406759/

相关文章:

silverlight - Encoding.ASCII 在 Silverlight 中不可用 有替代方案吗?

c# - 如何正确提供 PDF 文件

perl - 如何告诉 Perl 每 20 秒运行一些代码?

java - 如何在 linux/unix 中从本地服务器上以当前日期进行文件备份?

小写和大写字母的 unicode

ios - 将 NSString 转换为 NSUTF32StringEncoding

java - 如何在 Android 设备上将 WAV 编码为 mp3

regex - 清除正则表达式匹配变量的最佳方法是什么?

perl - 如何在没有扩展名的情况下获取运行脚本的名称

android - 如何使用 Android 上的 DocumentBuilder DOM 解析器解析带有包含非拉丁 Unicode 字符的标签名称的 XML