簡體   English   中英

即使要求使用 UTF-8 對其進行編碼,Perl output 仍無法讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM