如何处理文件中的特殊字符?

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

如何从外部文件读取特殊字符?这是一个简单的法语

.txt
文件,内容是https://fr.lipsum.com/的第一段:正如你在我的截图中看到的,文件编码是UTF-8,但重音符号不是显示正确。

我在记事本++和我的Raku脚本中尝试了各种编码,如下所示:

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

使用 Python 或 Ruby 脚本我不会遇到这个问题。我找不到任何关于此事的精确例子,可能是因为 Raku 还很新(??)。谢谢你。

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

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

Raku script, input file in notepad++, exec in cmd.exe


最终编辑:解决方案是启用一个选项(在 Windows 10 1803 的测试版状态下可用),以使操作系统正确处理 unicode 字符:请参阅下面的答案和评论...

io character-encoding raku rakudo
1个回答
6
投票

如果您不使用Windows

这个SO要么完全或几乎完全与你无关。

如果您使用的是 Windows 10

选中“测试版:使用 Unicode UTF-8 获得全球语言支持”选项复选框。

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

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

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

根据他们在这个答案下面的评论,OP 指出:

对于那些对该特定选项感兴趣的人,可以在 Windows 的“旧版”控制面板 -> 区域 -> 管理 -> 编辑设置中找到它...

如果您使用的是旧版本的 Windows

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

坏消息是他们在旧版本的 Windows 中犯了很多错误(甚至在 Windows 10 中,他们现在正在尝试修复),因此任何解决方案都将受到这些错误的限制。 (也许最大的问题是微软在这个话题上的双重言论[1],但希望我们能解决这个问题。)

综上所述,请阅读以下内容,然后返回寻找解决方案或发布新的问题,我们会尽力提供帮助。


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

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

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

但是它们肯定还没有出现——在最初写这个答案的时候还没有,而且,我怀疑再过 N 年也不会——至少因为对于许多最终用户来说,开箱即用的东西还不能正常工作。 。我认为这是 Windows 上 Unicode 的大多数问题的根源。

Python、Ruby 和 Perl 等较旧的语言提出了一系列 hack,通过使用 Microsoft 讽刺地描述的“Unicode 支持”,在简单的场景中向大多数用户隐藏了 Microsoft 较旧的 UTF8 支持的许多问题。

这总是伴随着一种权衡,即对于世界各地许多地区的更复杂的应用程序来说,事情会变得“非常”复杂,甚至完全无法工作。 (以至于连强大的微软也终于在 2018 年屈服了。) 本质上,直到 Microsoft 做出新的努力来使用该程序,在 Windows 上运行的软件别无选择,只能使用根本上被破坏的“Unicode 支持”,或者真正正确地支持 Unicode。

[1] Raku 和 Rakudo 专注于后者,在 Windows 上运行时出现的问题与微软旧的破碎方法相冲突有关。幸运的是,微软现在正在使用该程序,因此我们也许能够找到一种方法来解决您在 Windows 上使用 Unicode 时遇到的问题

只要您有耐心

特别是,如果您使用的是较旧的 Windows 版本,请预期它首先无法

现代 Unicode 识别软件一起工作,除非您很幸运。如果可以的话,我们仍然会提供帮助,但这可能需要您对我们、Microsoft 和 Rakudo 保持耐心,反之亦然。 脚注

[1]

在我最初写这个答案时,复选框附近有文字表明它适用于支持 Unicode 的程序。这与实际情况完全相反,但是嘿,这是微软。

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