Python字符串编码xmlcharrefreplace解码

问题描述:

我使用xmlcharrefreplace来替换字符串中的非标准字符,以便它可以保存在xml文件中。后来,我想重新将此字符串转换回原始字符。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 

请注意,我不能使用codecs.open(),因为我使用的库openpyxl打开包含数据以及Excel文件。对输入可能是什么字符没有限制 - 我希望最终字符串与初始字符串相同。

目标:将字符从xmlcharrefreplace转换回其脚本字符。 例如:“\ x90”变成“ồ”

你所描述的是不可能的,一般。当你从一个大字符集(任何东西)转换到一个较小的字符集时,你会失去信息。除非您对编码结果有限制,否则您无法对可以反转的内容进行编码。但是,如果您与标签上的数据库有一些协议,将在输入中出现而不是(例如字符序列“\ x”),则可以使用其中的一个或多个来表示编码字符串,并且您可以在该区域创建任何您喜欢的代码。例如,请注意示例输入后面如何显示为"T\xe1\xbb\x89nh \xc4\x90\xe1\xbb\x93ng Nai"

如果这对您有用,我建议您创建一个一对一的映射,存储在字典(及其反向)中,并在关键步骤中向两个方向索引字典。我假设您可以自己处理检测逻辑(编码时为非ASCII字符;解码时为标记序列)。

+0

谢谢,这是正确的答案。不幸的是字典映射的想法不适用于这个程序架构。 –