当前位置: 首页 > 面试题库 >

Python拉丁字符和Unicode

柯冯浩
2023-03-14
问题内容

我有一个树形结构,其中的关键字可能包含一些拉丁字符。我有一个遍历树上所有叶子并在特定条件下将每个关键字添加到列表的函数

这是我将这些关键字添加到列表中的代码:

print "Adding: " + self.keyword
leaf_list.append(self.keyword)
print leaf_list

如果在这种情况下的关键字是université,那么我的输出是:

Adding: université
['universit\xc3\xa9']

看来打印功能可以正确显示拉丁字符,但是当我将其添加到列表中时,它就会被解码。

我该如何更改?我需要能够使用标准拉丁字符而不是它们的解码版本来打印列表。


问题答案:

您没有unicode对象,但是具有UTF-8编码文本的字节字符串。印制例如字节串到你的终端 可能 ,如果你的终端被配置为处理UTF-8文本。

当转换一个列表串,该列表的内容被示出为 表示 ;
repr()函数的结果。字符串对象的表示形式对可打印ASCII范围以外的任何字节使用转义码;\n例如,换行符被替换。您的UTF-8字节由\xhh转义序列表示。

如果您使用Unicode对象,表示将使用\xhh逃逸
,但在Latin-1的范围内(外ASCII)仅Unicode代码点(其余都显示与\uhhhh\Uhhhhhhhh逃逸取决于它们的代码点);
在打印时,Python会自动将这些值编码为适合终端的正确编码:

>>> u'université'
u'universit\xe9'
>>> len(u'université')
10
>>> print u'université'
université

将此与字节字符串进行比较:

>>> 'université'
'universit\xc3\xa9'
>>> len('université')
11
>>> 'université'.decode('utf8')
u'universit\xe9'
>>> print 'université'
université

注意,长度反映了é代码点也被编码为两个字节。顺便说一句,是我的终端\xc3\xa9在将é字符粘贴到Python会话中时向Python提供了字节,因为它已配置为使用UTF-8,并且当我定义u'..'Unicode对象文字时,Python已检测到并解码了字节。

我强烈建议您阅读以下文章,以了解Python如何处理Unicode,以及Unicode文本和编码的字节字符串之间的区别是什么:

  • 每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)作者:Joel Spolsky

  • 在Python的Unicode指南

  • Ned Batchelder的实用Unicode



 类似资料:
  • 谷歌Web字体上的一些字体支持多个“字符集”。问题是,如果我使用的web字体只提供“拉丁”字形,用户将页面翻译成不支持字形的语言时,会清楚地注意到混乱的文本。 我希望我的网页字体支持最流行的语言在世界上除了英语,例如,西班牙语,德语,法语等。 出于这个目的,我想知道,“拉丁”和“拉丁扩展”到底是针对哪种语言的。 我想答案应该是这样的:

  • 问题内容: 请帮我! 我正在将多行文本文件转换为猪拉丁文。 示例:Pig的拉丁语翻译:这是一个示例。应该是:Histay siay naay xampleeay。 我需要将标点符号留在原处(大多数情况下是句子的结尾)。我还需要任何以原始字母大写字母开头,以猪拉丁字母大写字母开头的单词,以及其余的字母小写。 这是我的代码: 我的文本文件是: 程序返回: 我如何让他们按照他们所在的行打印?另外,我该如

  • 我尝试使用字符集latin1排序规则latin1\u general\u ci将字符集ISO-8859-15的字符串存储在MySQL字段中。 似乎这两者都不完全兼容。我无法保存正确的€-符号。 有人能告诉我ISO-8859-15的正确吗?

  • 我试着从网上提取数据。很少有拉丁文字母是以纯十六进制形式出现的。 对于例如: 这个链接将变成 我怎么才能从这里得到拉丁字母。我想概括一下这一点,并对所有在我的数据帧中更改的拉丁字母都这样做。

  • 问题内容: 原始问题: 表结构: NULL, VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, INDEX ( ASC), INDEX ( ASC) ) ENGINE InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; 样本数据: 我正在执行的查询: 预期成绩: 实际

  • 013. Roman to Integer 问题 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. Subscribe to see which companies asked this question 思路 首先要知道罗马数字的规