【问题标题】:How to convert an UTF string with scandinavian characters to ASCII?如何将带有斯堪的纳维亚字符的 UTF 字符串转换为 ASCII?
【发布时间】:2011-01-31 20:37:13
【问题描述】:

我想转换这个字符串

foo_utf = u'nästy chäräctörs with å and co.' # unicode

进入这个

foo_ascii = 'nästy chäräctörs with å and co.' # ASCII

.

知道如何在 Python (2.6) 中执行此操作吗?我找到了unicodedata 模块,但我不知道如何进行转换。

【问题讨论】:

  • ascii 没有 å ä ö 和其他,你想要别的吗,例如iso 8859-1(latin-1) 还是 utf-8 ?
  • 我可能需要重新表述一下这个问题。我在为 Django 开发模板标签时遇到了这个问题。我注意到它在使用常规字符串时工作得很好,但在使用完全相同的 unicode 字符串时会失败。
  • 您的顶部字符串不是任何形式的 UTF。 UTF 是 unicode 编码,这意味着它们是表示 unicode 字符的字节序列。你所拥有的是一个 unicode 字符串,它是一个字符序列。每个中的字节数无关紧要,并且无法从 python 中确定。区别不仅仅是迂腐。了解 python 对你的文本做了什么将帮助你避免那些讨厌的Unicode{En,De}codeError s。

标签: python ascii utf


【解决方案1】:

我不认为你可以。那些“nästy chäräctörs”不能编码为 ASCII,所以你必须选择不同的编码(UTF-8 或 Latin-1 或 Windows-1252 之类的)。

【讨论】:

  • 这是真的。 ASCII 仅包含 127 个字符,并且没有变音符号。如果您选择正确的代码页,则可以将其转换为 ANSI。无论如何,除非您别无选择,否则最好坚持使用 Unicode。
【解决方案2】:

试试字符串的encode方法。

>>> u'nästy chäräctörs with å and co.'.encode('latin-1')
'n\xe4sty ch\xe4r\xe4ct\xf6rs with \xe5 and co.'

【讨论】:

    【解决方案3】:

    python 的 stdlib 中的 codecs 模块中有几个选项,具体取决于您希望如何处理扩展字符:

    >>> import codecs
    >>> u = u'nästy chäräctörs with å and co.'
    >>> encode = codecs.get_encoder('ascii')
    >>> encode(u) 
    '
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)
    >>> encode(u, 'ignore')
    ('nsty chrctrs with  and co.', 31)
    >>> encode(u, 'replace')
    ('n?sty ch?r?ct?rs with ? and co.', 31)
    >>> encode(u, 'xmlcharrefreplace')
    ('n&#228;sty ch&#228;r&#228;ct&#246;rs with &#229; and co.', 31)
    >>> encode(u, 'backslashreplace')
    ('n\\xe4sty ch\\xe4r\\xe4ct\\xf6rs with \\xe5 and co.', 31)
    

    希望其中之一能满足您的需求。 Python codecs module documentation 中提供了更多信息。

    【讨论】:

      【解决方案4】:

      这确实是一个 Django 问题,而不是一个 python 问题。 如果字符串在您的 .py 文件之一中,请确保您的文件顶部有以下行: -*- coding: utf-8 -*-

      此外,您的字符串必须是“unicode”(u'foobar')类型

      然后确保你的 html 页面在 unicode 中工作:

      &lt;meta http-equiv="content-type" content="text/html;charset=utf-8" /&gt;

      这应该可以解决问题。无需编码/解码等,只需确保一切都是 unicode,并且您是安全的。

      【讨论】:

      • 感谢您的出色指点。我设法将问题追溯到将其分解的代码中的 str 转换。我发现其他 cmets 也很有见地。 :)
      • 另外,实际上将文件保存为 utf-8,因此它与编码声明一致。
      【解决方案5】:

      您还可以使用 python 中提供的 unicodedata 模块 (http://docs.python.org/library/unicodedata.html) 将大量 unicode 值转换为 Ascii 变体。 IE 修复不同的 "s 等。通过 encode() 方法跟进,你可以完全清理一个字符串。

      你主要从 unicodedata 中提取出来的方法是规范化并将其传递给 NFKC 标志。

      【讨论】:

        猜你喜欢
        • 2011-04-17
        • 2016-04-10
        • 2018-08-14
        • 2018-11-14
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        相关资源
        最近更新 更多