首页 > 解决方案 > 用等效的 UTF-8 格式“o”替换“ó”等非 ASCII 字符

问题描述

我有一个看起来像这样的列表:

name_list=['ramon del rio,georgina genes,jorge lópez']

我想创建一个字节数组。为此,我正在运行以下代码,

for i in name_list:
    name_list_bytes.append(list(map(lambda x: str.encode(x, "UTF-8"), i.split(','))))

print(name_list_bytes)

[b'ramon del rio', b'georgina genes', b'jorge l\xf3pez']

如您所见,名称“jorge lópez”被转换为“jorge l\xf3pez”。我怎样才能超越这个转换并正确转换名称?

[编辑]

我发现 python 编码函数有一个第二个参数来控制字符以及当这些字符出现在字符串中时 python 应该做什么。

for i in name_list:
    name_list_bytes.append(list(map(lambda x: str.encode(x, "ascii", "ignore"), i.split(','))))

print(name_list_bytes)

[b'ramon del rio', b'georgina genes', b'jorge lpez'] #removes the unknown asscii character.

“忽略”参数删除了 ascii 字符,尽管我正在寻找用正确的值替换它们。我想最好的方法是识别这些字符并手动替换它们,虽然很乏味。

标签: pythonbyteencode

解决方案


在查看这个问题后,我找到了该unidecode包,该包完美地正确替换了非 ASCII 字符。因此,由于重复,问题已关闭。

import unidecode
name_list=['ramon del rio,georgina genes,jorge lópez']
final_list=[]

for i in name_list:
    final_list.append(list(map(lambda x: str.encode(unidecode.unidecode(x)), i.split(','))))

final_list
[[b'ramon del rio', b'georgina genes', b'jorge lopez']]

推荐阅读