我在另一个主题上找到了类似问题的解决方案,但不幸的是,它不适用于我。 这是我的问题:
我正在用代理对unicode制作数据帧,我想在另一个文件中搜索它(例如:“ \ uD83C \ uDFF3”,“ \ u26F9”,“ \ uD83C \ uDDE6 \ uD83C \ uDDE8”):
with open("unicodes.csv","rt") as csvfile:
emoticons = pd.read_csv(csvfile,names=["xy"])
emoticons = pd.DataFrame(emoticons)
emoticons = emoticons.astype(str)
接下来,我正在阅读带有文本的文件,其中某些行包含代理对unicode:
for chunk in pd.read_csv(path,names=["xy"],encoding="utf-8",chunksize=chunksize):
spam = pd.DataFrame(chunk)
spam = spam.astype(str)
在此for循环中,我正在检查行是否包含代理对unicode,如果为真,那么我想将此替代对unicode打印为表情符号-这就是为什么我要编码和解码该“ i”值,即str: (来自How to work with surrogate pairs in Python?的解决方案)
for i in emoticons.xy:
if spam["xy"].str.contains(i,regex=False).any():
print(i.encode('utf-16','surrogatepass').decode('utf-16'))
#printing:
#\uD83C\uDFF3
#\u26F9
#\uD83C\uDDE6\uD83C\uDDE8
因此,当我启动程序时,它仍然将替代代理对uni打印为str而不是表情符号,但是当我自己将替代对unicode输入到打印函数中时,它可以工作:
print("\uD83C\uDFF3".encode("utf-16","surrogatepass").decode("utf-16","surrogatepass"))
#printing:
#?
我在做什么错?我尝试通过此方法和其他解决方案制作字符串,但仍然无法正常工作。
编辑:
hexdump -C file.csv
00004b70 5c 75 44 38 33 44 5c 75 44 45 45 39 0a 5c 75 44 |\uD83D\uDEE9.\uD|
00004b80 38 33 44 5c 75 44 45 45 42 0a 5c 75 44 38 33 44 |83D\uDEEB.\uD83D|
00004b90 5c 75 44 45 45 43 0a 5c 75 44 38 33 44 5c 75 44 |\uDEEC.\uD83D\uD|
00004ba0 43 42 41 0a 5c 75 44 38 33 44 5c 75 44 45 38 31 |CBA.\uD83D\uDE81|
EDIT2: 因此,我发现了某种可行的方法,但仍需要改进: https://stackoverflow.com/a/54918256/4789281
我要转换的另一个文件中的文本为外观文件:
"O żółtku zapomniałaś \uD83D\uDE02"
"Piękny outfit \uD83D\uDE0D"
在执行此操作时,另一个主题中的建议是:
print(codecs.decode(i,encoding='unicode_escape',errors='surrogateescape').encode('utf-16','surrogatepass').decode('utf-16'))
我有这样的东西:
O żóÅtku zapomniaÅaÅ ?
PiÄkny outfit ?
所以我的代理配对被替换了,但是我的波兰字符被替换成了奇怪的东西。