Perl 无法识别非 ascii 字符



我有*TXT带有非 ASCII 字符的文件,例如é ê ù.但是*TXT文件模式处于ANSI(默认模式(。

我在Perlutf8中使用,用于读取非ASCII字符并转换为hexadecimal entities

问题是,如果*TXT文件具有ANSI模式,那么Perl不起作用,但是*TXT模式处于utf8,那么脚本可以正常工作。

Perl:

use open ':encoding(utf8)';
binmode STDOUT, ':utf8';
...

#assume $amatch contains non-ascii characters 
$amatch = ord($amatch);
$amatch = sprintf("&#x%x;", $amatch);

有人对此有解决方案吗?

如果它不是 UTF-8,当然如果你告诉 Perl 它是 UTF-8,它就行不通了!

机器的"ANSI"编码可以通过在Win32::GetACP()返回的数字前面加上cp来获得。

use Win32 qw( );
my $ansi_enc = "cp".Win32::GetACP();
open(my $fh, "<:encoding($ansi_enc)", $qfn)  # File encoded using machine's ANSI encoding.

而不是

open(my $fh, "<:encoding(UTF-8)", $qfn)  # File encoded using UTF-8.

最新更新