【问题标题】:Working out file encoding: I know the string, know the character, what is the encoding?制定文件编码:我知道字符串,知道字符,编码是什么?
【发布时间】:2010-08-16 14:53:34
【问题描述】:

我正在将 csv 文件中的数据添加到数据库中。如果我打开 CSV 文件,一些条目包含项目符号 - 我可以看到它们。 file 表示它被编码为 ISO-8859。

$ file data_clean.csv 
data_clean.csv: ISO-8859 English text, with very long lines, with CRLF, LF line terminators

我按如下方式读取它并将其从 ISO-8859-1 转换为 UTF-8,这是我的数据库需要的。

    row = [unicode(x.decode("ISO-8859-1").strip()) for x in row]
    print row[4]    
    description = row[4].encode("UTF-8")
    print description

这给了我以下信息:

'\xa5 Research and insight \n\xa5 Media and communications'
¥ Research and insight 
¥ Media and communications 

为什么 \xa5 项目符号字符转换为日元符号?

我假设是因为我将它作为错误的编码读入,但在这种情况下,正确的编码是什么?也不是cp1252。

更一般地说,是否有一个工具可以让您指定 (i) 字符串 (ii) 已知字符,并找出编码?

【问题讨论】:

    标签: encoding character-encoding


    【解决方案1】:

    我不知道任何通用工具,但this Wikipedia page(链接自the page on codepage 1252)表明A5Mac OS Roman 代码页中的一个要点。

    【讨论】:

      【解决方案2】:

      更一般地说,有没有一种工具可以用来 您可以指定 (i) 字符串 (ii) 已知 字符,找出编码?

      您可以轻松地用 Python 编写一个。 (示例使用 3.x 语法。)

      import encodings
      
      ENCODINGS = set(encodings._aliases.values()) - {'mbcs', 'tactis'}
      
      def _decode(data, encoding):
          try:
              return data.decode(encoding)
          except UnicodeError:
              return None
      
      def possible_encodings(encoded, decoded):
          return {enc for enc in ENCODINGS if _decode(encoded, enc) == decoded}
      

      所以如果你知道你的要点是 U+2022,那么

      >>> possible_encodings(b'\xA5', '\u2022')
      {'mac_iceland', 'mac_roman', 'mac_turkish', 'mac_latin2', 'mac_cyrillic'}
      

      【讨论】:

        【解决方案3】:

        你可以试试

         iconv -f latin1 -t utf8 data_clean.csv 
        

        如果你知道它确实是 iso-latin-1

        虽然在 iso-latin-1 \xA5 确实是一个 ¥

        编辑:实际上这似乎是 Mac 上的一个问题,使用 Word 或类似内容以及 Arial (?) 并打印或转换为 PDF。关于字体的一些问题,什么不是。也许您需要先明确地按摩文件。听起来很熟悉?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-12
          • 2017-05-05
          • 1970-01-01
          • 2023-03-22
          • 2012-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多