如果您没有使用Windows
这篇文章与您无关或几乎无关。
如果您使用的是Windows 10
检查“Beta: 在全球范围内支持Unicode UTF-8”选项复选框。(点此链接)
至少在我最初撰写答案时发布的文本中,这个与Unicode相关的复选框附近的文字声称它是为不支持Unicode的程序设计的,但您应该将它忽略掉[1]。
最初撰写答案时,此复选框位于控制面板,“区域设置”条目,“管理”标签,“更改系统区域设置”按钮下。
自我撰写答案以来,Microsoft 可能已经更新了此选项,并且可能会再次更改它,例如移动和/或重新命名复选框,或使事情变得更加复杂,而不仅仅是单击一个复选框。
根据作者下方的评论:
对于那些有兴趣的人,可以在 Windows 的“传统”控制面板中找到该选项 -> 区域设置 -> 管理 -> 编辑设置...
如果您使用旧版Windows
可以说,好消息是Raku和Rakudo拥有世界上最好的现代Unicode支持之一,而令人满意的消息是它依赖于Microsoft正确地支持Unicode,而他们现在正在努力做到这一点。
坏消息是,在旧版Windows(甚至在他们现在试图修复的Windows 10中)中,他们犯了很多错误,因此任何解决方案都将受到这些错误的限制。(也许最大的问题是Microsoft在该主题上的含糊不清[1],但让我们希望我们可以绕过这个问题。)
总之,请阅读以下内容,然后返回搜索解决方案或发布新的SO问题,我们将尝试提供帮助。
引用维基百科页面Microsoft Windows 中的 Unicode:
2018年,他们仍在改进其对UTF-8的操作系统支持
Microsoft在上个世纪的Unicode支持方面走错了路。好消息是,他们终于开始走出他们为自己和其他人挖的坑了。
但他们肯定还没有到达目标——至少在我最初撰写答案时,我怀疑要再过N年——因为对许多终端用户来说,事情并没有正确地工作。我认为这是Windows上大多数Unicode问题的根源。
Python、Ruby和Perl等旧语言通过使用微软所谓的“Unicode支持”来隐藏Microsoft旧版UTF8支持中的许多问题,使大多数用户在简单场景下不受影响。然而,这总是有一个折衷方案,对于全球许多地区的许多复杂应用程序来说,问题变得非常棘手甚至完全无法解决。(如此之多,以至于即使强大的Microsoft最终在2018年也屈服了。)
本质上,在Microsoft的新尝试出现之前,运行于Windows上的软件除了要么使用基本上损坏的“Unicode支持”,要么实际上正确地支持Unicode之外别无选择。[1]
Raku和Rakudo专注于后者,而在Windows上运行时出现问题与此有关,因为它与Microsoft旧的损坏方法相冲突。幸运的是,Microsoft正在跟进,并且我们可能会找到一种方法来解决您在Windows上遇到的Unicode问题,只要您有耐心。
特别是,如果您正在使用旧版Windows,请不要指望它可以与现代的Unicode感知软件一起正常工作,除非您很幸运。如果可能的话,我们仍然会提供帮助,但这可能涉及您对我们、Microsoft和Rakudo有耐心,反之亦然。
脚注
[1] 当我最初写下这个答案时,复选框旁边有一段文本表明它是针对不支持Unicode的程序。这完全相反于实际情况,但嘿,这是微软。
.txt
文件的编码(如屏幕截图所示),并在问题中作为文本提供.txt
文件的片段(而不是图像)。您还应该以文本形式发布Perl 6脚本,这将帮助我们进行复制和粘贴以尝试复现您的行为。谢谢! - Håkon Hæglandperl6 -e 'say "\c[Latin Small Letter A with Acute]"'
如果输出的是 á,则一切正常。否则,问题不在于读取文件,而是您的命令行无法处理 UTF8 输出。不过,我手头没有 Windows 机器可以测试。 - Scimon Proctortype testfile.txt
与 Rakudo 输出相同。 - Frenzowskiperl6 -e "say qq/\c[Latin Small Letter A with Acute]/"
。你的机器上有Windows PowerShell吗?我建议在PowerShell上尝试相同的命令,看看是否遇到了相同的问题。(抱歉没有换行,SO的移动站点似乎无法正确输入它们) - Daniel Mita