与python的口音

时间:2017-11-16 22:01:51

标签: python diacritics

我想知道如何在python中保留重音,如果我们可以向自己解释一下它是如何工作的,我花了几个小时搜索。我还是什么都不懂x)

示例1:

text = "Danay Suarèz hablé"
print(text) 

输出:

Danay Suar▒z habl▒

示例2:

print(text.encode('utf-8'))

输出:

 b'Danay Suar\xc3\xa8z habl\xc3\xa9'

我想输出:Danay Suarèz hablé

2 个答案:

答案 0 :(得分:1)

试试这个:

import sys
def sys_out(out_data):
    try:
        print(out_data)  # or change this line to sys.stdout.write(out_data)
    except UnicodeEncodeError:
        if sys.version_info >= (3,):
            print(out_data.encode('utf8').decode(sys.stdout.encoding))
        else:
            print(out_data.encode('utf8'))


sys_out("Danay Suarèz hablé")

注意:但通常情况下,它取决于您的文本查看器....是否支持其他编码(例如utf-8)。

祝你好运......

答案 1 :(得分:0)

计算机以位为单位工作,因此1和0的序列(它们如何物理存储是另一个故事)。整数通常保存为16个1和0,因此51 = 00000000 00110011。因为这很长,我们通常用十六进制写,所以2 dec = 00 33 hex。但不仅数字被保存为位,字符(基本上所有其他)也是。虽然我们可以“自然地”对位(二进制)中的整数进行编码,但其他数据类型更难。对于字符,“正常”方式是ASCII,它只是将“随机”字节序列映射到字符。在ASCII 00 33 =“3”。

但ASCII仅声明128(7位)不同的字符。这对于英语和一些额外的角色来说已经足够了,但对于其他语言还不够。所以人们创造了大量的编码,主要是因为他们用于语言的角色。因此,虽然ASCII表示00 33 =“3”,但其他编码可能会说00 33 =“ü”或者其他什么。人们遇到的大多数编码实际上都与前128个字符上的ASCII一致但是扩展了它。

您的sys.stdout.encoding表示它是UTF8,因此python会将è转换为字节C3 A8。现在你的命令行codepage是850,更好地称为latin1。在latin1 C3 A8应该是è(这不是你看到的,所以也许我在某处翻译时出错或者你的终端没有可以显示的字体),这与UTF8不同。 / p>

但是如何解决这个问题呢?告诉你的命令行使用UTF8或告诉python使用latin1。在执行脚本之前,您应该可以通过键入chcp 65001将命令行编码更改为UF8。

如果使用print(text.encode('utf-8')) python尝试显示此对象所包含的字节的人类可读版本。它会尽可能地将字节解释为ASCII,并且只显示原始位。所以\xc3\xa8表示字节c3 a8。但是,当然如果您实际打印它会将这些符号以UTF8传输到您的终端,但因为在ASCII范围UTF8和latin1同意,您的终端正确解释这些字符。