我有*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.