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

need to translate and convert encoded values to readable english strings in 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'])

看起来像下面

现在我只想将这些值转换并翻译成可读的英文值。

我可以这样做吗? , 如果是, 怎么样, 请..

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

>>> '<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

我找不到自动执行此操作的方法。希望对您有所帮助。

您的示例没有展示单一的统一编码。我们可以推测两位数是 Latin-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