我在Windows机器上有一个Unicode格式的文件.有没有办法在使用perl脚本的Windows机器上将其转换为ASCII格式
这是UTF-16 BOM.
我有时必须从外部源读取文本文件,这些文件可以使用各种字符编码;通常是 UTF-8、Latin-1 或 Windows CP-1252。
\n\n有没有一种方法可以方便地读取这些文件,像 Vim 等编辑器一样自动检测编码?
\n\n我希望有这样简单的事情:
\n\nopen(my $f, \'<:encoding(autodetect)\', \'foo.txt\') or die \'Oops: $!\';\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,Encode::Guess并不能解决这个问题:它只有在可以明确检测到编码的情况下才有效,否则就会发出嘎嘎声。大多数 UTF-8 数据名义上是有效的 latin-1 数据,因此它在 UTF-8 文件上失败。
\n\n例子:
\n\n#!/usr/bin/env perl\n\nuse 5.020;\nuse warnings;\n\nuse Encode;\nuse Encode::Guess qw(utf-8 cp1252);\n\nbinmode STDOUT => \'utf8\';\n\nmy $utf8 = "H\\x{C3}\\x{A9}llo, W\\x{C3}\\x{B8}rld!"; # "H\xc3\xa9llo, W\xc3\xb8rld!" in UTF-8\nmy $latin = "H\\x{E9}llo, W\\x{F8}rld!"; # "H\xc3\xa9llo, W\xc3\xb8rld!" in CP-1252\n\n# Version 1\nmy $enc1 = Encode::Guess->guess($latin);\nif (ref($enc1)) {\n say $enc1->name, \': \', $enc1->decode($latin);\n}\nelse {\n say "Oops: $enc1";\n}\nmy $enc2 = …Run Code Online (Sandbox Code Playgroud) Perl中用于确定值是字节序列还是编码字符串的标准测试是什么?如果它是一个编码字符串,它的字符编码是什么?
我们假设以下完整的Perl脚本:
'foo';
Run Code Online (Sandbox Code Playgroud)
如何判断这个文字字符串是一个字节序列还是某些编码中的字符串?如果它是某些字符编码中的字符串,那么它的字符编码是什么?
这个问题与Unicode或UTF-8无关.它通常与Perl中的字节与字符有关.这个问题也不是关于自动字符编码检测,这完全是一个不同的主题.
UPDATE
在初始化之后$letter,我希望Perl告诉我它认为存储在变量中的字母是什么字符编码$letter.我不认为它必然是正确的.确保Perl理解字母编码的字符是我作为程序员的责任.我明白了.但是应该有一种简单,简单的方法来测试Perl认为字符(或字符串)所在的字符编码.不存在吗?
C:\>perl -E "$letter = 'Ž'; say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>perl -MEncode -E "$letter = decode('UTF-8', 'Ž'); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>perl -MEncode -E "$letter = decode('Windows-1252', 'Ž'); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
matches
C:\>perl -MEncode -E "$letter = decode('Windows-1252', 'Ž'); $letter = encode('Windows-1252', $letter); …Run Code Online (Sandbox Code Playgroud) 我有一个日语的SMTP电子邮件,有些是英文的.电子邮件的主题以UTF-8,base64编码.
对象:=?UTF-8?B?5Y2K5bCO5L2T6KO96YCg6KOF572u44OX44Os44OT44O1440844004O8O8 = =?UTF-8≤B≤440Iidog5b6M5bel56iL44Oh44O844Kr44O844GM5by344GE?=
如何用日语/中文检测这个并将其解码为日文/中文.
我可以在Perl/Java/Python中实现这一点吗?