python口音

python口音,python,diacritics,Python,Diacritics,我想知道如何保持python中的重音,如果我们能向自己解释一下它是如何工作的,我会花几个小时搜索。我还是什么都不懂(x) 例1: text = "Danay Suarèz hablé" print(text) 输出: Danay Suar▒z habl▒ b'Danay Suar\xc3\xa8z habl\xc3\xa9' 例2: print(text.encode('utf-8')) 输出: Danay Suar▒z habl▒ b'Danay Suar\xc3\xa8z h

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

例1:

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

Danay Suar▒z habl▒
 b'Danay Suar\xc3\xa8z habl\xc3\xa9'
例2:

print(text.encode('utf-8'))
输出:

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

我只想输出:
Danay Suarèz hablé
试试这个:

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的序列(它们的物理存储方式是另一回事)。整数通常保存为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将您的
è
转换为字节c3a8。现在,您的命令行是850,更好地称为latin1。在拉丁语中,C3 A8应该是与UTF8不同的
è
(这不是您看到的,因此可能我在翻译中的某个地方出错,或者您的终端没有可以显示该内容的字体)

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


如果使用
print(text.encode('utf-8'))
python会尝试显示此对象包含的字节的可读版本。在可能的情况下,它将把字节解释为ASCII码,在不可能的情况下只显示原始位。因此
\xc3\xa8
表示字节c3-a8。当然,如果你真的打印出来,它会将这些符号以UTF8格式传输到你的终端,但是因为在ASCII范围内UTF8和拉丁语1是一致的,所以你的终端会正确地解释这些字符。

你如何执行你的代码以及在哪里看到输出?Windows 10或Windows 10上的Git bash的命令行在spyder中工作。Python3.6上也没有问题,实际上没有问题。检查您使用的python版本这不是python交互控制台或python解释器本身的问题。可能是您的终端仿真器(控制台等)有问题