如何从外部文件读取特殊字符?这里是一个简单的法语<?php
$command = escapeshellcmd('python3 /usr/C:/xampp/htdocs/scripts/a.py');
$output = shell_exec($command);
print $output;
文件,内容是https://fr.lipsum.com/的第一段:如您在我的屏幕截图中所见,文件编码为UTF-8,但是口音无法正确显示。>
我在notepad ++和perl6脚本中尝试了各种编码,如下所示:
.txt
使用Python或Ruby脚本时,我不会遇到问题。我找不到关于此问题的任何精确示例,可能是因为perl 6还是很新的(??)。谢谢。
我的脚本显示在屏幕截图中:
enc => "utf8"
enc => "latin1"
最终编辑:解决方案是启用一个选项,该选项在Windows 10 1803中处于beta状态,以使操作系统正确处理Unicode字符:请参阅下面的答案和评论...
答案 0 :(得分:5)
TL; DR 如果您使用的是Windows 10,则可能只需要在控制面板中单击正确的选项。如果您使用的是旧版本,请告诉我们您使用的是哪个版本,我们将从那里开始。
您的问题似乎是控制台输出的编码不是utf8和/或字体是ANSI。
Aiui您正在使用Microsoft Windows,可能是Windows10。此答案假定这是您的根本问题,解决方案归结为:
如果您希望像P6和Rakudo P6编译器这样的支持Unicode的现代软件能够与之配合使用,您将需要依靠Microsoft的有关Unicode支持的说明,并在我们所能及的范围内提供帮助。
如果使用Windows 10,则应重点关注其新的“测试版:使用Unicode UTF-8进行全球语言支持”选项。在控制面板的“区域”条目,“管理”选项卡,“更改系统区域设置”按钮下可以找到该文件。 (具有讽刺意味的是,它是针对不支持Unicode的程序,但实际上是Microsoft的双重代言。)
引用Wikipedia的页面Unicode in Microsoft Windows:
他们仍然在2018年改善对UTF-8的操作系统支持
在过去的几十年中,他们凭借对Unicode的支持走错了脚。他们最近才刚刚开始为自己和其他人挖出自己的洞。但是它们还不存在,至少因为对于许多最终用户而言,事情开箱以来无法正常工作。我认为这是您问题的根源。
Python,Ruby和经典Perl系列之类的较旧语言提出了一系列令人费解的黑客,这些黑客在简单的情况下为大多数用户隐藏了Microsoft对较旧的UTF8支持的许多问题。 (由于权衡取舍,除了在全球许多地方的简单应用程序以外,事情变得非常毛茸茸,甚至完全无法使用。如此之多,以至于强大的微软终于在2018年屈服了。)
与Microsoft为做出正确的事情而重新努力相比,向Rakudo添加复杂的解决方法是一个低优先级的事情。
这就是我的建议:
如果您使用的是Windows 10,请专注于新的"Beta: Use Unicode UTF-8 for worldwide language support" option。希望只有在您幸运的情况下,它才能正常工作。 (它仍然是beta状态。)请耐心等待。在后一种情况下,我们会尽力而为,但这对每个人都是新的。
如果您使用的是较旧的Windows,除非您非常,否则希望它首先不与现代软件一起使用。幸运(似乎您还没有去过)。我们仍然会尽力提供帮助,但这可能会让您对我们和Microsoft以及Rakudo保持耐心,反之亦然。
毫无疑问,随着时间的流逝,Rakudo将会增加一些实用的解决方法,尘埃落定,P6被假定为默认的Unicode统治的新阶段。微软可能会更轻松地让他们的技术对Unicode进行正确的处理。但是目前,解决方案归结为在Windows中选择正确的选项,看来您还没有这样做。