2017-05-31 35 views
0

私はxmlcharrefreplaceを使用して、xmlファイルに保存できるように文字列の非標準文字を置き換えています。後で、この文字列を元の文字に戻して再変換したいと思います。私もデータを含むExcelファイルを開くには、ライブラリopenpyxlを使用していますので、私は、)(codecs.open使用することはできませんPython文字列エンコーディングxmlcharrefreplaceデコード

import openpyxl 
import cgi 
from html.parser import HTMLParser 
parser = HTMLParser() 

startingString = "Tỉnh Đồng Nai" #example string 
print("Starting string: " + startingString) #Starting string: Tỉnh Đồng Nai 

# 1. This string contains non-standard characters. Convert these characters using xmlcharrefreplace 
escapedString = cgi.escape(startingString) 
strEscapedString = str(escapedString) 
aposString = strEscapedString.replace("'", "'") 
savedToExcelString = str(aposString.encode('utf-8', 'xmlcharrefreplace'))[2:-1] 

print("xmlcharrefreplace converted to: " + savedToExcelString) #xmlcharrefreplace converted to: T\xe1\xbb\x89nh \xc4\x90\xe1\xbb\x93ng Nai 

# 2. The string is saved to an xml file 
# 3. The string is read from an xml file 

# 4. Convert the string back into the original starting string 
unescapedString = parser.unescape(savedToExcelString) 
#what do I do here??? I need to 'undo' the xmlcharrefreplace encoding 

print(startingString + " == " + unescapedString + " is " + str(startingString == unescapedString)) 
# Tỉnh Đồng Nai == T\xe1\xbb\x89nh \xc4\x90\xe1\xbb\x93ng Nai is False 
# ^^ Should be the same string at the end 

注意。入力がどんな文字セットになることができるかに制限はありません。最終文字列を最初の文字列と同じにします。

目的:xmlcharrefreplaceの文字をスクリプト文字に戻します。 例:「\ x90」は「祝日」になります

答えて

0

説明したことはありません。一般にです。大きな文字セット(何か)を小さなものに変換すると、情報が失われます。コード化された結果に制限がある場合を除き、逆にできるものをコーディングする方法はありません。

ではない(入力文字列 "\ x"など)に表示されるタグに関するデータベースとのいくつかの合意がある場合、そのうちの1つ以上を使用してコード化されたあなたがその地域で好きなコードを作成することができます。たとえば、後でサンプル入力がどのように表示されるかは、"T\xe1\xbb\x89nh \xc4\x90\xe1\xbb\x93ng Nai"に注意してください。

これがうまくいく場合は、1対1のマッピングを作成し、辞書(およびその逆)に保存し、クリティカルステップで双方向にインデックスを付けることをお勧めします。私はあなたが検出ロジック(エンコード時に非ASCII文字、デコード時にタグ付きシーケンス)を処理できると仮定します。

+0

ありがとう、これは正解です。残念なことに、辞書マッピングの考え方はこのプログラムのアーキテクチャでは機能しません。 –

関連する問題