Команда file
говорит мне:Как читать текст Юникода Юникода Юникода в Perl?
tmp.txt: Little-endian UTF-16 Unicode text, with CRLF line terminators
cat
, head
и так далее не может отобразить этот файл правильно.
Но vim
может отобразить его правильно. vim
говорит мне:
[~/tmp/tmp.txt] [utf-8,dos]
"tmp.txt" [converted][dos]
и :set
в Vim говорит fileencoding=ucs-2le
Так что в Perl:
open FH,'<:encoding(ucs-2le)',$file;
while(<FH>){
chomp;
# A start
print;
# Perl: Wide character in print at a.pl line 12, <FH> line 1
# And display incorrect
# A end
# B start
binmode STDOUT,":utf8";
print;
# display incorrect too
# B end
}
Как я могу прочитать этот файл правильно в Perl?
Для чего это стоит, ваш код работает отлично для меня на небольшой файл, который я только что создал, который использует прямой порядок байтов UTF-16. (Мне нужно было удалить спецификацию вручную, написав 's/^ \ x {FEFF} //', чтобы предотвратить предупреждение «Широкий символ в печати», поскольку UCS-2 не использует спецификацию.) – ruakh
Are вы уверены, что ваш терминал ожидает UTF-8? – cjm
'locale' является' en_US.UTF-8', ': set' в vim' termencoding = utf-8', SecureCRT также utf8 – everbox