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

问题描述 投票:6回答:1

如何从外部文件中读取特殊字符?这里有一个简单的法语.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处于测试状态的选项,以使操作系统正确处理unicode字符:请参阅下面的答案和评论......

io character-encoding perl6 rakudo
1个回答
5
投票

TL; DR如果您使用的是Windows 10,则可能只需要在控制面板中单击右侧选项即可。如果您使用的是旧版本,请告诉我们您使用的是哪个版本,我们将从那里开始使用。


您的问题似乎是控制台输出编码不是utf8和/或字体是ANSI。

您正在使用Microsoft Windows,可能是Windows 10.这个答案假定这是您的根本问题,解决方案归结为:

  • 如果你想要像P6这样的现代Unicode软件和Rakudo P6编译器一起工作,你需要依靠微软的Unicode支持指令,尽我们的帮助。
  • 如果您使用的是Windows 10,则应专注于他们的新“Beta:使用Unicode UTF-8进行全球语言支持”选项。这可以在控制面板,“区域”条目,“管理”选项卡,“更改系统区域设置”按钮下找到。 (具有讽刺意味的是,它适用于那些不支持Unicode的程序,但却支持微软的双重语言。)

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

他们仍然在2018年改进了对UTF-8的操作系统支持

在过去的几十年中,他们在Unicode支持下走错了路。他们刚刚开始挖掘他们为自己和其他人挖洞的方法。但他们还没有,至少因为对于许多最终用户来说,事情并没有正确地开箱即用。我认为这是你问题的根源。

像Python,Ruby和经典Perl系列这样的老语言提出了一系列令人费解的黑客攻击,这些黑客在简单的场景中隐藏了大多数用户对Mi​​crosoft的旧版UTF8支持的许多问题。 (在世界各地的许多地方,除了简单的应用之外,事情变得非常繁琐甚至完全不可行。所以即便是强大的微软最终在2018年投降了。)

与微软重新努力做正确的事情相比,为Rakudo添加复杂的解决方案是一个不太重要的事情。

所以这就是我的建议:

  • 如果您使用的是Windows 10,请关注新的"Beta: Use Unicode UTF-8 for worldwide language support" option。只有幸运时才能使用它。 (它仍处于测试状态。)如果没有,请耐心等待。在后一种情况下我们会尽力而为,但对每个人来说都是新的。
  • 如果您使用的是较旧的Windows,除非您非常幸运(并且您似乎还没有),否则一开始使用现代软件会导致它无法运行。我们仍然会尽可能地提供帮助,但它可能会让您对我们以及Microsoft和Rakudo保持耐心,反之亦然。

毫无疑问,随着时间的推移,随着时间的推移,随着时间的推移,Rakudo会逐渐增加实际的解决方法,并且将P6编写为默认值的新的Unicode优势阶段。微软可能会让他们的技术更容易使用Unicode做正确的事情。但是现在解决方案归结为在Windows中选择正确的选项,看起来你还没有这样做。

© www.soinside.com 2019 - 2024. All rights reserved.