【问题标题】:Converting Non-UTF-8 characters to UTF-8将非 UTF-8 字符转换为 UTF-8
【发布时间】:2015-10-13 10:22:05
【问题描述】:

我的 Linux 系统上有一些文件。这些文件名可以是其他 un_eng-utf8。我想将它们从非 utf8 字符转换为 utf-8 字符。如何使用 C 库函数或 python 脚本来做到这一点。

【问题讨论】:

  • 你知道原始编码吗?是否所有字符都在 UTF-8 中可用,或者您想用类似的字符替换不可用的字符、忽略它们或对它们做其他事情?

标签: python c linux


【解决方案1】:

如果您知道用于对文件名进行编码的字符编码:

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."

【讨论】:

    【解决方案2】:
    def converttoutf8(a):
        return unicode(a, "utf-8")
    

    现在对于您遍历的每个文件名,这将返回 utf-8 格式的文件名

    或者更好的是,使用convmv。它将文件名从一种编码转换为另一种编码,并将目录作为参数。听起来很完美。

    【讨论】:

    • 您的代码假定 a 字节串使用 utf-8 编码进行编码。 OP 明确表示输入不是 utf-8。
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多