前提・実現したいこと
Pythonと正規表現を用いて、Unicodeエスケープされた文字列を変換したいのですが、
下記に示す通り、対象文字列にUnicodeエスケープを示す "\u" のプレフィックスがありません。
内容
変換前文字列 = '\X2\3010914D7BA1301151B75A92914D7BA1\X0\ (b)15.9\X2\03C600D7\X0\9.5\X2\03C6\X0\'
このうち、"\X2" と "\X0" で囲まれたUnicodeエスケープされた(と思われる)文字列を変換する。
変換後文字列 = "【配管】冷媒配管 (b)15.9φ×9.5φ"
現在は、下記のように "\X2" と "\X0" で囲まれた文字列を見つけ、4文字ずつ切り出して、
"\u" のプレフィックスを付与した上で、変換しています。
Python
1# \X2\〜\X0\で囲まれた文字列 → UNICODE変換対象 2word_X2_X0 = '3010914D7BA1301151B75A92914D7BA1' 3unicode = '\\u' + '\\u'.join(str(n) for n in re.split('(....)', word_split_unicode)[1::2]) 4word_decode = unicode.encode().decode('unicode-escape')
stack overflowで、スマートに解決されている下記のコード例を見つけたのですが、
言語がRubyで、Pythonでの実装方法が分かりませんでした。
(下記、少し質問用に修正しています)
Ruby
1ESCAPE_SEQUENCE_EXPR = /\\X2\\(.*)\\X0\\/ 2 3def decode_ifc(str) 4 str.gsub(ESCAPE_SEQUENCE_EXPR) do 5 $1.gsub(/..../) { $&.to_i(16).chr(Encoding::UTF_8) } 6 end 7end 8 9str = '\X2\3010914D7BA1301151B75A92914D7BA1\X0\ (b)15.9\X2\03C600D7\X0\9.5\X2\03C6\X0\\' 10puts "Input:", str 11puts "Output:", decode_ifc(str)
【実行結果】 Input: \X2\3010914D7BA1301151B75A92914D7BA1\X0\ (b)15.9\X2\03C600D7\X0\9.5\X2\03C6\X0\ Output: 【配管】冷媒配管 (b)15.9φ×9.5φ
特に、to_i(16).chr(Encoding::UTF_8) あたりのPythonでの対応方法が分かりません。
ご教授頂ければ、幸いです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/16 02:11 編集
2022/06/16 02:48
2022/06/16 04:36