系统相关
首页 > 系统相关> > 解码UTF-8字符串到Windows-1256

解码UTF-8字符串到Windows-1256

作者:互联网

我使用以下代码将UTF-8字符串编码为Windows-1256字符串:

        string q = textBox1.Text;
        UTF7Encoding utf = new UTF7Encoding();

        byte[] winByte = Encoding.GetEncoding(1256).GetBytes(q);

        string result = utf.GetString(winByte);

该代码有效,但是我无法解码结果或将其编码为原始字符串!
如何在转换之前将编码的字符串(结果变量)解码为相同的字符串(q变量)?

解决方法:

您正在错误地转换字符串.

看看下面的注释代码.注释解释了什么是错误的,以及如何正确地做,但是基本上正在发生的是:

首先,您使用Encoding.GetEncoding(1256).GetBytes(q)将字符串(即UTF16)转换为ANSI代码页1256字符串.

然后,您使用UTF7编码将其转换回去.但这是错误的,因为您需要使用ANSI代码页1256编码将其转换回:

string q = "ABئبئ"; // UTF16.
UTF7Encoding utf = new UTF7Encoding(); // Used to convert UTF16 to/from UTF7

// Convert UTF16 to ANSI codepage 1256. winByte[] will be ANSI codepage 1256.
byte[] winByte = Encoding.GetEncoding(1256).GetBytes(q);

// Convert UTF7 to UTF16.
// But this is WRONG because winByte is ANSI codepage 1256, NOT UTF7!
string result = utf.GetString(winByte);

Debug.Assert(result != q); // So result doesn't equal q

// The CORRECT way to convert the ANSI string back:
// Convert ANSI codepage 1256 string to UTF16

result = Encoding.GetEncoding(1256).GetString(winByte);

Debug.Assert(result == q); // Now result DOES equal q

标签:decoding,encoding,utf-8,c
来源: https://codeday.me/bug/20191030/1970026.html