Python: 将 Unicode 字符串转换为 HTML 数字代码

Python: Convert String with Unicode to HTML numeric code

大家好,我正在寻找一种解决方案,将字符串中包含的所有 unicode 转换为相应的 HTML 实体。

例如:

input: "This is \u+0024. a string with \u+0024. random \u+0024. unicode"
输出:“这是$带有$随机$unicode的字符串”

我目前对此问题的解决方案如下:

if "\u+" in my_string:
  unicode_code = (label_content.split("\u+"))[1].split('.')[0]
  unicode_to_replace = f"\u+{unicode_code}."
  unicode_string = f"U+{unicode_code}"
  html_code = unicode_string.encode('ascii', 'xmlcharrefreplace')
  my_string = label_content.replace(unicode_to_replace,  html_code)

但是unicode字符串转换不正确,有什么建议吗?

提前致谢!

我自己找到了一个解决方案,供对此感兴趣的任何人使用。 它与我所问的有点不同,输出不向 html 实体显示 unicode,而是将它们转换为相应的字符,因为在我的情况下这更好。

因此代码的最后部分如下所示:

# e.g. of an input string containing some sort of unicodes.
# This is how they are formatted in my input file.
my_string =  "This is \u+0024. a string with \u+0024. random \u+0024. unicodes" 

if "\u+" in my_string :
  unicode_code = (my_string .split("\u+"))[1].split('.')[0]
  unicode_to_replace = f"\u+{unicode_code}."
  unicode = f"\u{unicode_code}"
  # Where the actual unicode is converted to html entity
  html_entity = unicode.encode('utf-8').decode('raw-unicode-escape')
  my_string = my_string .replace(unicode_to_replace, html_entity)


print(my_string)
my_string >> "This is $ a string with $ random $ 

我更愿意申请 Regular expression operations (re module)pattern 变量覆盖

  • 所有有效的 Unicode 值(参见例如 U+042F 而不是中间的 U+0024),
  • 输入字符串的所有语法版本:input原始问题中的变量被编辑了三次(with/without前导反斜杠 and/or 尾随点)和
  • my_string OQ 自我回答中的变量不正确:'\u+0024' 引发 truncated \uXXXX escape 错误。

脚本:

import re

def UPlusHtml(matchobj):
    return re.sub( r"^\?[uU]\+", '&#x', 
             re.sub( r'\.$', '', matchobj.group(0) ) ) + ';';

def UPlusRepl(matchobj):
    return chr( int( re.sub( r"^\?[uU]\+", '', 
                       re.sub( r'\.$', '', matchobj.group(0) ) ),16 ) );

pattern = r"(\?[uU]\+[0-9a-fA-F]+\.?)"

input = "This is U+0024. a string with U+042f random U+0024. unicode"

print( input )
print( re.sub( pattern, UPlusHtml, input ) )
print( re.sub( pattern, UPlusRepl, input ) )

print('--')

my_string =  "This is \u+0024. a string with \u+042F random \u+0024. unicodes"

print( my_string )
print( re.sub( pattern, UPlusHtml, my_string ) )
print( re.sub( pattern, UPlusRepl, my_string ) )

输出\SO105976.py

This is U+0024. a string with U+042f random U+0024. unicode
This is $ a string with Я random $ unicode
This is $ a string with Я random $ unicode
--
This is \u+0024. a string with \u+042F random \u+0024. unicodes
This is $ a string with Я random $ unicodes
This is $ a string with Я random $ unicodes

请注意,我自己是一个正则表达式初学者,所以我相信一定存在更有效的基于正则表达式的解决方案,毫无疑问……