需要在python中将编码值转换为可读的英文字符串

2024-09-27 00:18:36 发布

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

我有下面的数据框,我有日语,中文在公司名称

 data = [['company1', '<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>'], ['company2', 
 '<c1>lom<e9>kszer Kft.'], ['company3', 'Ernst and young'],
   ['company4', '<c5>bo Akademi']]

  df = pd.DataFrame(data, columns = ['Name', 'company_name'])

它看起来像下面

enter image description here

现在我只想把这些值转换成可读的英文值

我可以吗,如果是,请说明如何


Tags: and数据名称data公司c1youngkft
2条回答

您的示例没有显示单一的统一编码。我们可以推测两位数的数字是拉丁-1,但我猜测(也基于duplicate question)真相确实比这更复杂

无论如何,至少对于一般方向,请尝试以下方法:

import re
...
for index in range(len(data)):
    data[index][1] = re.sub(
        r'<U\+([0-9a-fA-F]{4})>', 
        lambda x: chr(int(x.group(1), 16)),
        re.sub(
            r'<([0-9a-fA-F]{2})>',
            lambda x: chr(int(x.group(1), 16)), 
            data[index][1]))

演示:https://ideone.com/X60x3Q

可以避免重复使用lambda表达式,但代价是使用稍微复杂一点的正则表达式

for index in range(len(data)):
    data[index][1] = re.sub(
        r'<(?:U\+)?((?<=\+)[0-9a-fA-F]{4}|(?<=<)[0-9a-fA-F]{2})>', 
        lambda x: chr(int(x.group(1), 16)),
        data[index][1])

演示:https://ideone.com/SkuvAJ

这需要一些工作。我只是手工翻译的。 这是:

>>> '<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>'
'<U+042E><U+043F><U+0438><U+0442><U+0435><U+0440>' # not useful!😒
>>> '\u042E\u043F\u0438\u0442\u0435\u0440' # changed the format manually
'Юпитер' # WOW that's it

我找不到一种自动完成的方法。希望能对你有所帮助

相关问题 更多 >

    热门问题