问题描述
正如我的问题标题所示,我使用 Perl 来执行一些与正则表达式相关的查询。但是,我在正文中使用带有变音符号的 UTF8 编码输入,当我生成输出时,它总是 UTF-16 LE/UCS-2 LE BOM 编码。
我的主要问题是输入中的变音符号被替换为“??”在输出中。我认为这个问题在于编码。我试图删除很多可能导致我的问题的代码,但问题仍然存在。
这是我的代码:
use utf8; # Source is encoded using UTF-8
use open ':std',':encoding(locale)';
对于本网站上类似问题的其他几个答案的建议,我已多次更改:
我试过这个选项:
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
我还尝试在 CLI 中运行在命令末尾标记的以下选项:
binmode(STDOUT,":utf8");
use open ":encoding(utf8)";
use open IN => ":encoding(utf8)",OUT => ":utf8";
我在代码中放入的更多行没有成功:
export PERL_UNICODE=SDL
也有人推荐使用
'环境'
但我找不到任何关于我将如何做到的信息。他建议的代码是:
id|field1|field2|field3
--|------|------|------
1 | b | f | z
2 | q | q | q
但我不知道该把它放在哪里或更改它。
希望有人能帮我解决这个问题。
解决方法
您显示的输出似乎不是您声称的 UTF-16 或 UCS-2。 (?
太少了。)也没有 BOM 的证据。
另一方面,输出与UTF-8一致。 é
、è
、à
、ò
、ô
、ë
、à
和 ö
都编码为使用 UTF-8 的两个字节。
Perl 完全按照您的要求执行,但是您正在使用需要不同编码的工具或终端查看 UTF-8。您需要为您的工具或终端提供正确的编码,或者调整您的工具或终端的预期。
例如,您可以使用 chcp 65001
告诉 Windows 控制台期望使用 UTF-8。
由于您完全没有提供有关您的工具或终端的信息,因此我们只能提供帮助。