GB2312转UTF-8后不可逆?解决方法

GB2312转UTF-8后不可逆?
如题,我做了两个将编码在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)