我面临一个奇怪的问题。我在Windows命令提示符下看到,每个'/'字符都被垃圾字符(日元符号)替换。我选择了两种字体类型“MS Gothic”和“Raster”。但同样的问题。如果我使用Raster,则问题是间歇性的。请让我知道如何解决问题。
谢谢, 纳加
答案 0 :(得分:5)
在命令提示符下输入chcp
,我打赌你会看到Active code page: 932
Windows控制台具有code pages的概念,这是一个前unicode天的遗物,其中字节0-255映射到不同的字符,具体取决于语言。虽然字符a-z,A-Z,0-9是一致的,但较少使用的字符被映射到目标语言中流行的字符。
在code page 932中,反斜杠被映射到日元字符。
这是一个常见问题。见Microsoft's note on MSDN:
警告使用的Windows代码页和OEM代码页字符集 日语操作系统包含日元符号(¥) 反斜杠()。因此,日元符号是禁止的字符 NTFS和FAT文件系统。将Unicode映射到日语时 代码页,WideCharToMultiByte和其他转换函数映射两者 反斜杠(U + 005C)和正常的Unicode Yen符号(U + 00A5) 相同的性格。出于安全原因,您的应用程序不应该 通常允许字符U + 00A5在可能的Unicode字符串中 转换为用作FAT文件名。有关更多信息,请参阅 安全考虑因素:国际特征。
<强>更新强>
抱歉延迟了,我花了一点时间回忆起我最初读到的内容。最好的参考是Mike Kaplan的博客条目here。 michkap是所有unicode最好的Microsoft博客。如果你处理字符集,编码问题和国际化的黑暗角落,他的博客是必不可少的参考。
从日元字符的入口作为反斜杠:
...在日语代码页932上,0x5c是YEN SIGN,在韩语上 代码页949,0x5c是WON SIGN。
这并不是说0x5c不充当路径分隔符 - 它 仍然。而且这也不是说Unicode代码点 对于日元和元(U + 00a5和U + 20a9)确实充当路径分隔符 - 因为他们没有。
...
在实践中,经过多年日本和日本的基于代码页的系统 韩国使用各自的货币符号作为路径分隔符, 据信客户只是习惯于这种外观。和 因此,没有兴趣改变这种外观(何时 系统设置是日语或韩语)除了那些 符号。
为了支持这种期望,日语和韩语字体,无论何时 默认系统区域设置分别设置为日语或韩语 当U + 005c为时,显示货币符号而不是反斜杠 所示。
我相信,你很难找到比那个更好的参考。
答案 1 :(得分:1)
Yen和\字符都有字节值0x5C,只是在不同的字符集中。这是如此常见,日本人普遍意识到这一点,并不认为这是一个问题。
请参阅this blog post的评论部分 - Norman Diamond于2004年12月27日上午1:45写道“Windows路径使用日语默认系统区域设置,因为0x5c是日元符号,而日元符号是路径分隔符。 “(诺曼在日本工作)