【发布时间】:2012-03-11 08:38:00
【问题描述】:
我在将 Unicode 字符串打印到 Windows 控制台时遇到了一个奇怪的问题*。
考虑一下这段文字:
אני רוצה לישון
Intermediary
היא רוצה לישון
אתם, הם
Bye
Hello, world!
test
假设它在一个名为“file.txt”的文件中。
当我去*:“type file.txt”时,它打印得很好。但是当它从 Perl 程序中打印出来时,像这样:
use strict;
use warnings;
use Encode;
use 5.014;
use utf8;
use autodie;
use warnings qw< FATAL utf8 >;
use open qw< :std :utf8 >;
use feature qw< unicode_strings >;
use warnings 'all';
binmode STDOUT, ':utf8'; # output should be in UTF-8
my $word;
my @array = ( 'אני רוצה לישון', 'Intermediary',
'היא רוצה לישון', 'אתם, הם', 'Bye','Hello, world!', 'test');
foreach $word(@array) {
say $word;
}
Unicode 行(在本例中为希伯来语)每次都会再次出现,部分中断,如下所示:
E:\My Documents\Technical\Perl>perl "hello unicode.pl"
אני רוצה לישון
לישון
�ן
Intermediary
היא רוצה לישון
לישון
�ן
אתם, הם
�ם
Bye
Hello, world!
test
(我将所有内容都保存为 UTF-8)。
这很奇怪。有什么建议吗?
(这不是“Console2”问题* - 相同的问题出现在“常规”Windows 控制台上,只是您看不到希伯来字形)。
* 使用“Console”(也称为“Console2”) - 这是一个不错的小实用程序,可以在 Windows 控制台中使用 Unicode - 例如,请参见此处: http://www.hanselman.com/blog/Console2ABetterWindowsCommandPrompt.aspx
** 注意:在控制台,你当然要说:
chcp 65001
【问题讨论】:
-
这些 是 Unicode 字符串,以 UTF-8 表示。请取消您的 -1。
-
很抱歉浪费了所有转义代码的精力,但在 Markdown 中,格式化代码所需要做的就是缩进 4 个空格。您也可以只按编辑器工具栏中的代码按钮
{}。 (@sarnold:已修复!) -
Helen:看看@minitech 如何在revisions 中重新格式化您的帖子(可通过“N 分钟前编辑”链接在每个帖子上获得)- 将来修改起来要容易得多,复制并粘贴到其他地方,并使用更整洁的格式样式。微型技术,非常感谢。再次。 :)
-
在一行前面至少放四个空格。 markdown 解析器会认为它是在代码样式中呈现的东西。通常,我在文本编辑器中输入我的帖子,然后将代码位移动一个缩进级别,然后再粘贴。
-
@TLP - 如果只有一个网站可以让人们询问与编程相关的question... :))))) (投票最高的答案列表
>命令)
标签: perl unicode utf-8 console unicode-string