【问题标题】:Mac Terminal Encoding IssuesMac 终端编码问题
【发布时间】:2017-01-21 05:24:45
【问题描述】:

我一直在处理我的 Macbook 中的终端问题。 我在 python 字符串中传递希腊词,例如

text = 'Καλημέρα κόσμε' 

每次我尝试对它执行任何简单的任务时,比如分割空间,我得到的结果都是这样的:

['\xce\x9a\xce\xb1\xce\xbb\xce\xb7\xce\xbc\xce\xad\xcf\x81\xce\xb1',  
'\xce\xba\xcf\x8c\xcf\x83\xce\xbc\xce\xb5']

当我使用 collections.Counter() 函数时也会发生同样的事情。

另一方面,当我打印字符串时,输出符合预期:

Καλημέρα κόσμε

我尝试做这里提到的事情:In OSX Lion, LANG is not set to utf8, how fix?(通过将 en_US.UTF-8 更改为 el_GR.UTF-8)没有任何运气。

任何人都知道为什么会发生这种情况以及我该如何解决?

提前谢谢你。

【问题讨论】:

    标签: python macos encoding utf-8 terminal


    【解决方案1】:

    这不是您的终端的问题,而是 Python (2) 的处理方式。

    即使您不对其执行任何任务,repr 也会转义任何非 ASCII(或不可打印(空格除外))字符:

    >>> text = 'Καλημέρα κόσμε'
    >>> text
    '\xce\x9a\xce\xb1\xce\xbb\xce\xb7\xce\xbc\xce\xad\xcf\x81\xce\xb1 \xce\xba\xcf\x8c\xcf\x83\xce\xbc\xce\xb5'
    

    如果你在 Python 3 中尝试同样的事情,它会正常打印:

    >>> text = 'Καλημέρα κόσμε'
    >>> text
    Καλημέρα κόσμε
    

    您使用 Python 2 有什么原因吗?

    【讨论】:

    • 即使您尝试打印此字符串(如果这不是太麻烦的话,是否可以为我尝试?):low_vowels = 'αειοηυω' 一切都按预期工作吗?我仍然拥有 Python 2 的唯一原因是我的许多库在那里运行良好,所以我没有特别的理由进行切换。
    • 在 Python 2 中,当使用 print 时,是的。在 Python 3 中,总是如此。 Python 2 的字符串类型实际上只是一个字节流,而在 Python 3 中它是 unicode。如果您正在使用非 ASCII 字母表做任何事情,我建议您使用 Python 3,如果没有什么能阻止您的话。您使用的哪个库还不能用于 Python 3?
    • 我可能很快就会做出改变!这不是 Python 3 中不可用的库的问题,只是不久前其中一些库在 Python 2.7 中不稳定且不稳定。您自己是否一直在使用 Python 3 而没有任何明显的问题?
    • 自 2012 年以来,我(几乎)只使用 Python 3。我做了很多文本处理,并且(在大多数情况下)不必再担心编码是非常好的。
    • 一切正常,感谢您的指导。
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多