加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何将已经两次UTF-8编码的字符串解码为简单的UTF-8?

发布时间:2020-12-15 08:36:59 所属栏目:百科 来源:网络整理
导读:我有一个巨大的 MySQL表,其行以UTF-8编码两次. 例如,“újratárgyalja”存储为“??jrat??rgyalja”. MySQL .Net连接器以这种方式下载它们.我尝试了很多与System.Text.Encoding.Convert()的组合,但没有一个工作. 发送集名称’utf8′(或其他字符集)无法解决它
我有一个巨大的 MySQL表,其行以UTF-8编码两次.
例如,“újratárgyalja”存储为“??jrat??rgyalja”.

MySQL .Net连接器以这种方式下载它们.我尝试了很多与System.Text.Encoding.Convert()的组合,但没有一个工作.

发送集名称’utf8′(或其他字符集)无法解决它.

如何将它们从双UTF-8解码为UTF-8?

解决方法

特殊问题,但我认为我可以通过UTF-8和Latin-1的适当混合来重现它(不仅仅是两次使用UTF-8而没有在Latin-1中插入错误的步骤).这是整个奇怪的往返,“那里又回来了”( Python 2. *或IronPython都应该能够重现这一点):
# -*- coding: utf-8 -*-
uni = u'újratárgyalja'
enc1 = uni.encode('utf-8')
enc2 = enc1.decode('latin-1').encode('utf-8')
dec3 = enc2.decode('utf-8')
dec4 = dec3.encode('latin-1').decode('utf-8')

for x in (uni,enc1,enc2,dec3,dec4):
  print repr(x),x

这是有趣的输出……:

u'xdajratxe1rgyalja' újratárgyalja
'xc3x9ajratxc3xa1rgyalja' újratárgyalja
'xc3x83xc2x9ajratxc3x83xc2xa1rgyalja' ?jrat??rgyalja
u'xc3x9ajratxc3xa1rgyalja' ?jrat??rgyalja
u'xdajratxe1rgyalja' újratárgyalja

以?开头的奇怪字符串显示为enc2,即两个utf-8编码,其中散布的latin-1解码投入到混合中.正如您所看到的那样,它可以通过完全相反的操作序列来解除:解码为utf-8,重新编码为latin-1,再次重新解码为utf-8 – 原始字符串又回来了(yay !).

我相信Latin-1(又名ISO-8859-1)和UTF-8的正常往返特性应该保证这个序列能够正常工作(抱歉,没有C#可以立即尝试使用该语言,但我会期望编码/解码序列不应该依赖于使用的特定编程语言.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读