Encoding 使用Python对iso-2022-jp编码使用正则表达式

Encoding 使用Python对iso-2022-jp编码使用正则表达式,encoding,unicode,python-3.x,Encoding,Unicode,Python 3.x,我有一些ISO-2022-JP编码的文本 例: まだ 正式 に 決まっ た わけ で は ない の で 。 根据re library文档,它可以接受ascii和unicode,因此我尝试将文本转换为unicode并在单词级别剪切: text.decode('iso-2022-jp') print(text) print(re.findall(r"[\w']+", text)) 然而,以下是我得到的输出: まだ 正式 に 決まっ た わけ で は ない の で 。 ['B', 'B', 'B',

我有一些ISO-2022-JP编码的文本

例: まだ 正式 に 決まっ た わけ で は ない の で 。

根据re library文档,它可以接受ascii和unicode,因此我尝试将文本转换为unicode并在单词级别剪切:

text.decode('iso-2022-jp')
print(text)
print(re.findall(r"[\w']+", text))
然而,以下是我得到的输出:

まだ 正式 に 決まっ た わけ で は ない の で 。
['B', 'B', 'B', 'B', 'B', '5', '0', 'B', 'B', 'K', 'B', 'B7h', 'C', 'B', 'B', 'B', 'B', 'o', '1', 'B', 'B', 'G', 'B', 'B', 'O', 'B', 'B', 'J', 'B', 'B', 'N', 'B', 'B', 'G', 'B', 'B', 'B']
我做错了什么? 谢谢

你的代码对我有用。(Python 3.3.0)

顺便说一句,您没有将解码的字符串分配给文本

text = text.decode('iso-2022-jp')

更新

若我将文本解码为ascii(丢弃非ascii字符),则得到以下结果

看起来你的解码/编码不正确


更新2

若您从文件中读取文本,则不需要对单个行进行解码。在
open()
call中指定编码

import re
with open('results', 'r', encoding='iso-2022-jp') as f:
    for line in f:
        matches = re.findall(r"[\w']+", line)
        if matches:
            print(matches)

我从我的文件中加载文本非常简单:
in_f=open(“results”,“r”)
lines=in_f.readlines()
是否有错?@Jean-MichaëlCelerier:使用
f.readlines()
可以得到字符串列表。您可以使用
f.read()
来获取多行字符串。在Python3中,
open()
encoding=xxx
参数可用于从具有xxx编码的文件中获取unicode内容——请参阅。无论如何,您应该在读取文件后始终调用
f.close()
(或者使用
构造来打开)。
>>> re.findall(r"[\w']+", text.encode('iso-2022-jp').decode('ascii', 'ignore'))
['B', 'B', 'B', '5', '0', 'B', 'B', 'K', 'B', 'B7h', 'C', 'B', 'B', 'B', 'B', 'o', '1', 'B', 'B', 'G', 'B', 'B', 'O', 'B', 'B', 'J', 'B', 'B', 'N', 'B', 'B', 'G', 'B', 'B', 'B']
import re
with open('results', 'r', encoding='iso-2022-jp') as f:
    for line in f:
        matches = re.findall(r"[\w']+", line)
        if matches:
            print(matches)