好的,这是我公司目前用于源代码控制的内容:
TortoiseHg 2.10版 使用Mercurial-2.8,Python-2.7.3,PyQt-4.10.2,Qt-4.8.4
我们的母公司是一家日本公司,他们与我们共享源代码。它们变得懒惰和草率,并将各种文件放在包含日文字符的子目录中。每当我们获得新项目的源代码并手动处理它们时,必须通过所有子目录,这是一个皇家的痛苦。我一直在阅读有关如何自动化的大量信息,但我仍然没有看到相对简单的方法。我们不知道我们会遇到哪些日文字符,所以它必须是动态的。我们无法对每个可能的日文字符进行硬编码。
Mercurial不能处理ASCII 255以上的时髦字符吗?我们正在尝试创建新的Mercurial存储库,并在将文件添加到存储库或调用一些将处理它们的Mercurial选项之前,使用批处理文件或脚本文件转换这些日文字符。
任何人都有解决方案吗?
答案 0 :(得分:0)
Mercurial说文件名“被明确地视为未知编码中的二进制数据”,并建议不要转换为Unicode或从Unicode转换文件名或内容。它不会转码非ASCII文件名,但我不知道这是否意味着它不接受它们。
您无需对任何字符进行硬编码。 所有日语,中文和韩语Unicode字符都在特定范围内。 http://docs.oracle.com/cd/B19306_01/server.102/b14225/appunicode.htm
平假名:范围:3040-309F http://www.unicode.org/charts/PDF/U3040.pdf
片假名:范围:30A0-30FF http://www.unicode.org/charts/PDF/U30A0.pdf
CJK汉字:范围:4E00-9FCC http://www.unicode.org/charts/PDF/U4E00.pdf
因此,例如在Python 2.x中,范围u'[\u3040-\u309F]'
应包含所有平假名字符。
你可以grep目录&这些范围内任何unicode字符的文件名。 ...或者更确切地说,任何不在ASCII /欧洲范围内的东西。 u'[\u0020-\uD7FF]'
并处理您遇到的日文字符。
那么问题是你想要将字符转换为什么?
罗马字的日语音译?或者只是一些占位符?如果您关心它是什么,您可以获得Unicode值&然后使用这样的东西将它转换为romaji:http://unidecode.codeplex.com/然后将该音译放回子目录名称。
如果您不关心角色是什么,只需用某种占位符替换它。
根据这个链接:How do I check if a string is unicode or ascii?和Python 2.x一个字符串可以是str或unicode,所以你也可以检查它 - 只能显示有问题的目录名。