Python字符串编码xmlcharrefreplace解码

Python字符串编码xmlcharrefreplace解码,python,xml,string,decode,encode,Python,Xml,String,Decode,Encode,我使用xmlcharrefreplace替换字符串中的非标准字符,以便将其保存在xml文件中。稍后,我想将这个字符串重新转换回原始字符 import openpyxl import cgi from html.parser import HTMLParser parser = HTMLParser() startingString = "Tỉnh Đồng Nai" #example string print("Starting string: " + startingString) #Sta

我使用
xmlcharrefreplace
替换字符串中的非标准字符,以便将其保存在xml文件中。稍后,我想将这个字符串重新转换回原始字符

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字符;解码时为标记序列)您自己。

谢谢,这是正确的答案。不幸的是,字典映射的想法不适用于此程序体系结构。