在Windows

时间:2017-08-03 03:54:10

标签: python windows perl unicode

我正在尝试在Windows上创建带有Unicode字符662f的文件(通过Perl或python,对我来说一切都很好)。在Linux上我能够得到chr是,但在Windows上我得到这个角色æ〜¯,以及一些我怎么也不能得到那个文件名为。

Python代码 -

 import sys
 name = unichr(0x662f)
 print(name.encode('utf8').decode(sys.stdout.encoding))

perl代码 -

my $name .= chr(230).chr(152).chr(175); ##662f
print 'file name ::'. "$name"."txt";

1 个答案:

答案 0 :(得分:1)

Windows上的Perl中的文件操作(文件名中的Unicode字符)

在Windows上的Perl中,我使用Win32::UnicodeWin32::Unicode::FileWin32::Unicode::Dir。它们与文件名中的Unicode字符完美配合。

请注意,Win32::Unicode::File::open()(和new())具有相反的参数顺序,而Perl的内置open() - 模式首先出现。

您无需手动编码字符 - 只需按原样插入(如果您的Perl脚本为UTF-8),或使用\x{N}表示法。

在Windows上打印出Unicode字符

在Windows上将Unicode打印到控制台是另一个问题。您无法使用cmd.exe。而是使用PowerShell ISE。 ISE的缺点是它不是控制台 - 脚本无法通过STDIN从键盘输入。

要获得Unicode输出,您需要在每个启动的PowerShell ISE中将输出编码设置为UTF-8。我建议在启动脚本中这样做。

使PowerShell ISE默认为Unicode输出的过程:

1)为了允许任何用户PowerShell脚本运行,您首先需要执行以下操作:

Set-ExecutionPolicy RemoteSigned

2)编辑或创建Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1之类的内容:

perl -w -e "print qq!Initializing the console with Perl...\n!;"
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8;

简短的Perl命令是允许修改System.Console属性的技巧。没有它,设置OutputEncoding时会出错。

如果我没记错的话,你还必须将字体更改为Consolas。

即使Unicode字符打印正常,您也可能无法在命令行参数中包含它们。在这些情况下,我发现\x{N}符号有效。 Windows角色地图实用程序是您的朋友。

(在我重新发现常规PowerShell无法显示大多数Unicode字符,并删除了对PowerShell(非ISE)的引用后,编辑得很重。现在我记得为什么我开始使用ISE ...)