将十六进制 NCR 文本表示形式转换为 Python 中的 Unicode
Converting Hex NCR text representations to Unicode in Python
我有一个从中文网页解析出来的字符串:
若き葉末には風が立ち 森は翡翠の息を返す 雲の切れ間から注ぐ 光に君を見初めん
碧き瞳のほほえむとき そは鐘のひびき胸に打つ さしのべた腕に絡む 蔦の葉に君を逃す
残る 香り 水面をかけゆく恋の舟 つかの間の波に 揺られ
やさしき幻影 心に映るその姿よ 永遠なる君に 想いを捧げん
若き葉末には風は眠り 森は密やかに息を止む 抱きしめた腕のなかで 静かに君は消えゆく
月は 満ちて 黄金の羽根が舞いおちる 我はただひとり森に
祈りたまえや
但是在解析的过程中,它被转换成如下形式的十六进制NCR字符串:
若き葉末には風が立ち\n森は翡翠の息を返す\n雲の切れ間から注ぐ\n光に君を見初めん\n\n碧き瞳のほほえむとき\nそは鐘のひびき胸に打つ\nさしのべた腕に絡む\n蔦の葉に君を逃す\n\n残る 香り\n水面をかけゆく恋の舟\nつかの間の波に 揺られ\n\nやさしき幻影 心に映るその姿よ\n永遠なる君に 想いを捧げん\n\n若き葉末には風は眠り\n森は密やかに息を止む\n抱きしめた腕のなかで\n静かに君は消えゆく\n\n月は 満ちて\n黄金の羽根が舞いおちる\n我はただひとり森に\n\n祈りたまえや
我想将这个字符串转换成合适的 unicode 格式。
根据我的研究,我已经能够收集到例如 一
映射到 unicode 字符串 b'\u4e00'
。
这可以通过剥离 &#x
并在字符串的开头添加 \u
前缀,同时将整个字符串变为小写并通过添加 [=18= 转换为字节串来手动完成] 在字符串之前。
这是在 repo 中完成的,但是通过 eval("b'\u4e00")
.
等代码使用低效的 eval 函数
[编辑:以上段落不正确。它不是字节字符串,而是 python2 中存在的 unicode 字符串。正确的映射是 一
-> u'\u4e00'
]
有更好的方法吗?考虑到这些十六进制映射字符串可能出现在常规文本中间的边缘情况,例如此处:
Je me levais tôt
Travailler en homme
Je me souviens du goût
Du café brûlant
Dans la tasse rouge
Et la femme qui dort
Les portes ouvertes de la grande usine
Bouffaient nos fils le jour de leurs quinze ans
On se levait tôt
Sortis de nos draps
On se retrouvait en bas
Les rues du village s'allumaient d'un coup
A six heures moins le quart
Les portes ouvertes de la grande usine
Bouffaient nos fils bien avant leurs quinze ans
On se lève trop tôt
On sait plus quoi faire
Dans le café des vieux
Les mains dans nos poches
Cachent nos poings noirs
Y'a plus qu'à qui change pas
Les portes sont fermées
Y'a plus de feu qui gronde
L'usine a tout vomi d'un seul coup
Pourquoi on fait ça
Pourquoi ça m'fait ça
Pourquoi on nous fait ça à nous
我正在处理大量数据,这些字符可以散布在任何地方,我需要一种有意义的方式来处理它们。
那么有没有更好的方法呢?理想情况下,python.
本身支持
如果有人能解决我的问题,我将不胜感激。提前致谢。
看看标准库中的 html
模块:
>>> import html
>>> html.unescape('Je me levais tôt')
'Je me levais tôt'
>>> html.unescape('若き葉末には')
'若き葉末には'
结果是 Unicode 字符串(在 Python 3 中输入 str
)。
请注意,b'...'
表示法用于字节字符串。
您示例中的文字 b'\u4e00'
没有多大意义,因为它是一个包含 6 个字符(\、u、4、e、0、0)的字节字符串。
您的意思可能是 '\u4e00'
(或 Python 2 中的 u'\u4e00'
),这是一个单字符 Unicode 字符串。
我有一个从中文网页解析出来的字符串:
若き葉末には風が立ち 森は翡翠の息を返す 雲の切れ間から注ぐ 光に君を見初めん
碧き瞳のほほえむとき そは鐘のひびき胸に打つ さしのべた腕に絡む 蔦の葉に君を逃す
残る 香り 水面をかけゆく恋の舟 つかの間の波に 揺られ
やさしき幻影 心に映るその姿よ 永遠なる君に 想いを捧げん
若き葉末には風は眠り 森は密やかに息を止む 抱きしめた腕のなかで 静かに君は消えゆく
月は 満ちて 黄金の羽根が舞いおちる 我はただひとり森に
祈りたまえや
但是在解析的过程中,它被转换成如下形式的十六进制NCR字符串:
若き葉末には風が立ち\n森は翡翠の息を返す\n雲の切れ間から注ぐ\n光に君を見初めん\n\n碧き瞳のほほえむとき\nそは鐘のひびき胸に打つ\nさしのべた腕に絡む\n蔦の葉に君を逃す\n\n残る 香り\n水面をかけゆく恋の舟\nつかの間の波に 揺られ\n\nやさしき幻影 心に映るその姿よ\n永遠なる君に 想いを捧げん\n\n若き葉末には風は眠り\n森は密やかに息を止む\n抱きしめた腕のなかで\n静かに君は消えゆく\n\n月は 満ちて\n黄金の羽根が舞いおちる\n我はただひとり森に\n\n祈りたまえや
我想将这个字符串转换成合适的 unicode 格式。
根据我的研究,我已经能够收集到例如 一
映射到 unicode 字符串 b'\u4e00'
。
这可以通过剥离 &#x
并在字符串的开头添加 \u
前缀,同时将整个字符串变为小写并通过添加 [=18= 转换为字节串来手动完成] 在字符串之前。
这是在 repo 中完成的,但是通过 eval("b'\u4e00")
.
[编辑:以上段落不正确。它不是字节字符串,而是 python2 中存在的 unicode 字符串。正确的映射是 一
-> u'\u4e00'
]
有更好的方法吗?考虑到这些十六进制映射字符串可能出现在常规文本中间的边缘情况,例如此处:
Je me levais tôt
Travailler en homme
Je me souviens du goût
Du café brûlant
Dans la tasse rouge
Et la femme qui dort
Les portes ouvertes de la grande usine
Bouffaient nos fils le jour de leurs quinze ans
On se levait tôt
Sortis de nos draps
On se retrouvait en bas
Les rues du village s'allumaient d'un coup
A six heures moins le quart
Les portes ouvertes de la grande usine
Bouffaient nos fils bien avant leurs quinze ans
On se lève trop tôt
On sait plus quoi faire
Dans le café des vieux
Les mains dans nos poches
Cachent nos poings noirs
Y'a plus qu'à qui change pas
Les portes sont fermées
Y'a plus de feu qui gronde
L'usine a tout vomi d'un seul coup
Pourquoi on fait ça
Pourquoi ça m'fait ça
Pourquoi on nous fait ça à nous
我正在处理大量数据,这些字符可以散布在任何地方,我需要一种有意义的方式来处理它们。
那么有没有更好的方法呢?理想情况下,python.
本身支持如果有人能解决我的问题,我将不胜感激。提前致谢。
看看标准库中的 html
模块:
>>> import html
>>> html.unescape('Je me levais tôt')
'Je me levais tôt'
>>> html.unescape('若き葉末には')
'若き葉末には'
结果是 Unicode 字符串(在 Python 3 中输入 str
)。
请注意,b'...'
表示法用于字节字符串。
您示例中的文字 b'\u4e00'
没有多大意义,因为它是一个包含 6 个字符(\、u、4、e、0、0)的字节字符串。
您的意思可能是 '\u4e00'
(或 Python 2 中的 u'\u4e00'
),这是一个单字符 Unicode 字符串。