我想知道如何在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é
答案 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同意,您的终端正确解释这些字符。