如何在python字符串中创建特殊字符

2024-06-16 09:49:03 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下特殊字符字符串:

x = "óیďÚÚ懇償燥績凡壇壁曇ÏエÀэүウーー」ÆØøæგბთლõшүжҮÿதணடஇஉுூொெௌДВБйЫСچخرسسبŞÛşکلںغখঙঝডইঊওোéñÑÜßẞÖÄäöÜĦĦ"

在ipython中打印时:

^{pr2}$

此字符串作为列表从另一个服务传递到下面的代码:

value_list = []
value_list.append(x) 

下面代码的目标是查找给定字符串中的所有特殊字符,并将它们作为列表返回。此列表将被解析为utf-8中的文本

In [33]: value_list

Out[33]: ['\xc3\xb3\xdb\x8c\xc4\x8f\xc3\x9a\xc3\x9a\xe6\x87\x87\xe5\x84\x9f\xe7\x87\xa5\xe7\xb8\xbe\xe5\x87\xa1\xe5\xa3\x87\xe5\xa3\x81\xe6\x9b\x87\xc3\x8f\xe3\x82\xa8\xc3\x80\xd1\x8d\xd2\xaf\xe3\x82\xa6\xe3\x83\xbc\xe3\x83\xbc\xe3\x80\x8d\xc3\x86\xc3\x98\xc3\xb8\xc3\xa6\xe1\x83\x92\xe1\x83\x91\xe1\x83\x97\xe1\x83\x9a\xc3\xb5\xd1\x88\xd2\xaf\xd0\xb6\xd2\xae\xc3\xbf\xe0\xae\xa4\xe0\xae\xa3\xe0\xae\x9f\xe0\xae\x87\xe0\xae\x89\xe0\xaf\x81\xe0\xaf\x82\xe0\xaf\x8a\xe0\xaf\x86\xe0\xaf\x8c\xd0\x94\xd0\x92\xd0\x91\xd0\xb9\xd0\xab\xd0\xa1\xda\x86\xd8\xae\xd8\xb1\xd8\xb3\xd8\xb3\xd8\xa8\xc5\x9e\xc3\x9b\xc5\x9f\xda\xa9\xd9\x84\xda\xba\xd8\xba\xe0\xa6\x96\xe0\xa6\x99\xe0\xa6\x9d\xe0\xa6\xa1\xe0\xa6\x87\xe0\xa6\x8a\xe0\xa6\x93\xe0\xa7\x8b\xc3\xa9\xc3\xb1\xc3\x91\xc3\x9c\xc3\x9f\xe1\xba\x9e\xc3\x96\xc3\x84\xc3\xa4\xc3\xb6\xc3\x9c\xc4\xa6\xc4\xa6']

In [34]: separator = re.compile('[.,;:!?&()]+', re.MULTILINE | re.UNICODE)

In [35]: value_list = [" ".join([word for word in separator.sub(' ', value).split()]).strip() for value in value_list]

In [36]: word_found = []

In [37]: for value in value_list:
             word_found.extend([i for i in value if 31 > ord(i) or ord(i) > 127])
         ....: 

In [39]: word_found.pop().encode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-39-61e9eca29caa> in <module>()
----> 1 word_found.pop().encode('utf-8')

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa6 in position 0: ordinal not in range(128)

很明显,python将x作为python字符串读取(每个\x字符都显示高字节和低字节)。在迭代字符串中的字符时,我们实际上是迭代字节而不是原始字符串中的字符。因此,ord将字节作为特殊字符并放入列表中。当编码为utf-8时,由于我们试图解码utf-8中原始字符的一部分,所以出现了超出范围的错误。在

我需要了解,如何在不改变将值传递到value_list或从单词_found中读取值的方式的情况下迭代这个python字符串

请帮忙。在


Tags: 字符串invaluelistwordxafxc3xd8
1条回答
网友
1楼 · 发布于 2024-06-16 09:49:03

您需要在迭代之前对结果字符串进行解码:

s = "".join(word_found) # Convert the list of characters into a string
print type(s) # <type 'string'>

u = s.decode('utf-8') # Decode it into utf-8
print type(u) # <type 'unicode'>

for c in u:
    print c # Prints each unicode character

如果必须使用列表格式,则可以将其重新打包为unicode字符列表:

^{pr2}$

相关问题 更多 >