【发布时间】:2015-10-13 10:22:05
【问题描述】:
我的 Linux 系统上有一些文件。这些文件名可以是其他 un_eng-utf8。我想将它们从非 utf8 字符转换为 utf-8 字符。如何使用 C 库函数或 python 脚本来做到这一点。
【问题讨论】:
-
你知道原始编码吗?是否所有字符都在 UTF-8 中可用,或者您想用类似的字符替换不可用的字符、忽略它们或对它们做其他事情?
我的 Linux 系统上有一些文件。这些文件名可以是其他 un_eng-utf8。我想将它们从非 utf8 字符转换为 utf-8 字符。如何使用 C 库函数或 python 脚本来做到这一点。
【问题讨论】:
如果您知道用于对文件名进行编码的字符编码:
unicode_filename = bytestring_filename.decode(character_encoding)
utf8filename = unicode_filename.encode('utf-8')
如果您不知道字符编码,则在一般情况下无法在不丢失数据的情况下进行转换——“non-utf8”不够具体,例如,如果您的文件名包含 @987654323 @ byte 那么它可以根据文件名编码进行不同的解释——它是cp1252编码中的u'®',但相同的字节代表u'«' 在cp437。有诸如chardet 之类的模块可以让您猜测字符编码,但这只是猜测 -- "There Ain't No Such Thing as Plain Text."
【讨论】:
def converttoutf8(a):
return unicode(a, "utf-8")
现在对于您遍历的每个文件名,这将返回 utf-8 格式的文件名
或者更好的是,使用convmv。它将文件名从一种编码转换为另一种编码,并将目录作为参数。听起来很完美。
【讨论】:
a 字节串使用 utf-8 编码进行编码。 OP 明确表示输入不是 utf-8。