相关疑难解决方法(0)

如何在Windows机器上的perl脚本中将Unicode文件转换为ASCII文件

我在Windows机器上有一个Unicode格式的文件.有没有办法在使用perl脚本的Windows机器上将其转换为ASCII格式

这是UTF-16 BOM.

windows unicode perl ascii

4
推荐指数
1
解决办法
8252
查看次数

读取文件时自动检测字符编码

我有时必须从外部源读取文本文件,这些文件可以使用各种字符编码;通常是 UTF-8、Latin-1 或 Windows CP-1252。

\n\n

有没有一种方法可以方便地读取这些文件,像 Vim 等编辑器一样自动检测编码?

\n\n

我希望有这样简单的事情:

\n\n
open(my $f, \'<:encoding(autodetect)\', \'foo.txt\') or die \'Oops: $!\';\n
Run 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)

io perl character-encoding

2
推荐指数
1
解决办法
2467
查看次数

Perl中的标准测试是什么来确定值是编码字符串还是字节序列?

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)

perl character-encoding

1
推荐指数
1
解决办法
1902
查看次数

从UTF-8 base64编码中识别日语

我有一个日语的SMTP电子邮件,有些是英文的.电子邮件的主题以UTF-8,base64编码.

对象:=?UTF-8?B?5Y2K5bCO5L2T6KO96YCg6KOF572u44OX44Os44OT44O1440844004O8O8 = =?UTF-8≤B≤440Iidog5b6M5bel56iL44Oh44O844Kr44O844GM5by344GE?=

如何用日语/中文检测这个并将其解码为日文/中文.

我可以在Perl/Java/Python中实现这一点吗?

java perl smtp utf-8

0
推荐指数
1
解决办法
1414
查看次数

标签 统计

perl ×4

character-encoding ×2

ascii ×1

io ×1

java ×1

smtp ×1

unicode ×1

utf-8 ×1

windows ×1