Perl6 (Rakudo) - 如何处理文件中的特殊字符?

Perl6 (Rakudo) - How to handle special characters from file?

如何从外部文件中读取特殊字符?这是一个简单的 .txt 法语文件,内容是 https://fr.lipsum.com/ 的第一段:如您在我的屏幕截图中所见,文件编码为 UTF-8,但重音显示不正确。

我在 notepad++ 和我的 perl6 脚本中尝试了各种编码,例如:

enc => "utf8"
enc => "latin1"

使用 Python 或 Ruby 脚本我没有遇到问题。我找不到关于这件事的任何精确示例,可能是因为 perl 6 仍然很新(??)。谢谢。

屏幕截图中显示的我的脚本:

my $text_contents = slurp "testfile.txt", enc => "utf8";
say $text_contents;
prompt;


最终编辑 :解决方案是启用一个选项,在 Windows 10 1803 的 beta 状态下可用,使 OS 处理 unicode 字符正确地:查看下面的答案和评论...

如果您不使用 Windows

此 SO 完全或几乎完全与您无关。

如果您使用 Windows 10

选中 "Beta: Use Unicode UTF-8 for worldwide language support" option 复选框。

至少在我最初写这个答案的时候,这个 Unicode 相关复选框附近的文本声称它适用于 支持 Unicode 的程序,但你应该忽略它。[1]

在我最初写这个答案时,在控制面板、“区域”条目、“管理”选项卡、“更改系统区域设置”按钮下找到了复选框。

自从我写下这个答案后,Microsoft 可能已经更改了这些东西,并且可能会再次更改它,例如通过移动 and/or 重命名复选框,或者使事情变得比单击单个复选框更复杂。

根据他们在此答案下方的评论,OP 指出:

For those who are interested in that particular option, it can be found in the "legacy" Control panel of windows -> Region -> Administrative -> Edit settings...

如果您使用的是旧版本 Windows

可以说,好消息是 Raku 和 Rakudo 拥有一些世界上最好的 现代 对 Unicode 的支持,好消息是它依赖于 Microsoft 正确支持 Unicode,他们现在正在尝试这样做。

坏消息是他们在 Windows 的旧版本中犯了很多错误(甚至在 Windows 10 中,他们现在正试图修复),所以任何解决方案都将被那些错误所束缚。 (也许最大的问题是微软在这个话题上的口是心非[1],但希望我们能解决这个问题。)

综上所述,请阅读以下内容,然后 return 搜索解决方案或 post 一个新的 SO 问题,我们会尽力提供帮助。


引用维基百科的页面 Unicode in Microsoft Windows:

they are still in 2018 improving their operating system support for UTF-8

Microsoft 上个世纪在 Unicode 支持上走错了路。好消息是,他们终于开始从他们为自己和其他人挖的坑中挖出一条路来。

但他们肯定还没有——在最初写这个答案的时候还没有,而且,我怀疑再过 N 年——至少因为开箱即用的东西不能正常工作对于许多最终用户。我认为这是 Windows.

上大多数 Unicode 问题的根源

较早的语言,如 Python、Ruby 和 Perl 想出了一个 运行ge of hacks 在简单的场景中隐藏了大多数用户对 Microsoft 较旧的 UTF8 支持的许多问题使用 Microsoft 讽刺地描述为“Unicode 支持”的功能。

这总是伴随着权衡,即事情变得 非常 毛茸茸甚至完全无法用于世界上许多地方的更复杂的应用程序。 (以至于即使是强大的微软也终于在 2018 年投降了。)

本质上,在 Microsoft 为该程序做出新的努力之前,运行 在 Windows 上的软件别无选择,只能使用其根本损坏的“Unicode 支持”或实际上正确支持 Unicode。[1]

Raku 和 Rakudo 专注于后者,运行 在 Windows 上出现的问题与这种与 Microsoft 的旧方法相冲突有关。幸运的是,Microsoft 现在正在使用该程序,因此我们可以找到一种方法来解决您在 Windows 上遇到的 Unicode 问题,前提是您有耐心.

特别是,如果您使用的是较旧的 Windows 版本,请期待它 不能 首先与 modern[=74= 一起使用] Unicode 感知软件,除非你很幸运。如果可以,我们仍然会提供帮助,但这可能需要您对我们、Microsoft 和 Rakudo 保持耐心,反之亦然。

脚注

[1] 在我最初写这个答案的时候,复选框附近有文本,它用于执行 支持Unicode。这与实际情况完全相反,但是嘿,这是微软。