GB2312转UTF-8后不可逆?解决方法
GB2312转UTF-8后不可逆?
如题,我做了两个将编码在utf-8和gb2312间转换的按钮,代码如下。但发现将textbox1中的中文utf-8转为gb2312再转回,大部分是可以转回的(部分文字会变成�?这样)。但如果先gb2312转为utf-8再转回的话就完全是乱码了,想了半天不知道为什么会这样,求解……
------解决方案--------------------
我的意思是说字符串已经没有Unicode这个概念了,字符串是由char类型组合,这个Unicode只是内部实现,换一个实现不会受影响。
就像上面的情况,一个错误的字节序列用uft-8编码返回字符串的时候,系统并没有按照编码规范转换为Unicode,而是对于没有定义的序列都用239,191,189这三个字节来表示,丢失了信息。
------解决方案--------------------
当你写
如题,我做了两个将编码在utf-8和gb2312间转换的按钮,代码如下。但发现将textbox1中的中文utf-8转为gb2312再转回,大部分是可以转回的(部分文字会变成�?这样)。但如果先gb2312转为utf-8再转回的话就完全是乱码了,想了半天不知道为什么会这样,求解……
- VB.NET code
'gb2312转utf8 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Text = Encoding.GetEncoding("utf-8").GetString(Encoding.GetEncoding("gb2312").GetBytes(TextBox1.Text)) End Sub 'utf-8转gb2312 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click TextBox1.Text = Encoding.GetEncoding("gb2312").GetString(Encoding.GetEncoding("utf-8").GetBytes(TextBox1.Text)) End Sub
------解决方案--------------------
我的意思是说字符串已经没有Unicode这个概念了,字符串是由char类型组合,这个Unicode只是内部实现,换一个实现不会受影响。
就像上面的情况,一个错误的字节序列用uft-8编码返回字符串的时候,系统并没有按照编码规范转换为Unicode,而是对于没有定义的序列都用239,191,189这三个字节来表示,丢失了信息。
------解决方案--------------------
当你写
- VB.NET code
txt = Encoding.UF8.GetString(byteVar)