[英]Perl output unreadable even despite asking to encode it using UTF-8
正如我的問題的標題所示,我使用 Perl 進行一些與正則表達式相關的查詢。 但是,我在正文中使用帶有變音符號的 UTF8 編碼輸入,當我生成 output 時,它始終是UTF-16 LE / UCS-2 LE BOM編碼的。
我的主要問題是輸入中的變音符號被替換為'??' 在 output 中。 我認為這個問題在於編碼。 我試圖剝離很多可能導致我的問題的代碼,但問題仍然存在。
這是我的代碼:
# Input = élèvàtòr ôpëràtör
# Output = ??l??v??t??r ??p??r??t??r
use utf8;
use open qw(:std :utf8);
{
while (<STDIN>)
{
$line = $_;
# remove long span (), <>
$line =~ s/[\(\)]//g;
# remove long span [] with everything in between
while ($line =~ s/\[[^\[\]]*\]//g) {;}
while ($line =~ s/\<[^\<\>]*\>//g) {;}
printf("$line");
}
}
關於本網站上類似問題的其他幾個答案的建議,我已經多次更改:
我試過這個選項:
use utf8; # Source is encoded using UTF-8
use open ':std', ':encoding(locale)';
這導致我的 CLI 聲明
Cannot find encoding "locale" at /usr/share/perl5/core_perl/open.pm line 126.
Cannot find encoding "locale" at /usr/share/perl5/core_perl/open.pm line 134.
我還嘗試在我的 CLI 中運行在命令末尾標記的以下選項:
-CDSL -le 'print "\x{1815}"'
-CO
我在代碼中輸入的更多行沒有成功:
binmode(STDOUT, ":utf8");
use open ":encoding(utf8)";
use open IN => ":encoding(utf8)", OUT => ":utf8";
也有人建議使用
'環境'
但我找不到任何關於我將如何做到這一點的信息。 他建議的代碼是:
export PERL_UNICODE=SDL
但我不知道在哪里放置或更改它。
我希望有人可以幫助我解決這個問題。
您顯示的 output 似乎不是您聲稱的 UTF-16 或 UCS-2。 (太少了?
。)也沒有 BOM 的證據。
另一方面,output 與 UTF-8 一致。 é
、 è
、 à
、 ò
、 ô
、 ë
、 à
和ö
都使用 UTF-8 編碼為兩個字節。
Perl 完全按照您的要求進行操作,但是您正在使用需要不同編碼的工具或終端查看 UTF-8。 您需要為您的工具或終端提供正確的編碼,或者調整您的工具或終端的期望。
例如,您可以使用chcp 65001
告訴 Windows 控制台期待 UTF-8。
由於您完全沒有提供有關您的工具或終端的信息,因此我們可以提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.