研究一下,想实现,编码和字符的转换并显示。
昨天在另一贴里解决了大部分问题,但还有部分字符没能显示正常,在EXCEL中显示正常。
以下代码由Jinglecat提供
int n = int.Parse("30E0", System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] bytes = BitConverter.GetBytes(n);
string str = System.Text.Encoding.Unicode.GetString(bytes); // 输出 ム
昨天在另一贴里解决了大部分问题,但还有部分字符没能显示正常,在EXCEL中显示正常。
以下代码由Jinglecat提供
int n = int.Parse("30E0", System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] bytes = BitConverter.GetBytes(n);
string str = System.Text.Encoding.Unicode.GetString(bytes); // 输出 ム
客户给的文档里有字符和编码的对应关系,我要导入数据库,所以希望根据编码转换为字符保证字符的准确性
u8编码的字符转为unicode的字符方法很多,我现在的问题是从编码转字符,找了一上午也没结果
我一直在研究,一头雾水
这个方法应该是对的,但有部分字符就是显示为方格,无法识别
int n = int.Parse(tt[i], System.Globalization.NumberStyles.AllowHexSpecifier);
Encoding.Convert(Encoding.Unicode,Encoding.UTF8,bytes)
如果这两句你真的明白了 我想你的问题就解决了
这两句可以进行几乎所有需要的字符编码转换
byte[] bytes = new byte[] {3,0,4,2};
将其做为参数进行转换,得到的字符只是两个方格
Encoding.UTF8.GetBytes(StringYours)就是utf8编码的byte数组。另外,UTF8,UTF7,Unicode(UTF16)的Unicode值是一样的,只是存放形式不一样而以。其他GB2312等则是有自己的一套编码体系。
byte[] utf8b;unicb = Encoding.Unicode.GetBytes(test);
Console.WriteLine("UNICODE Encoding: {0} bytes", unicb.Length);
DisplayArray(unicb);utf8b = Encoding.UTF8.GetBytes(test);
Console.WriteLine("UTF8 Encoding: {0} bytes", utf8b.Length);
DisplayArray(utf8b);其中DisplayArray函数如下:
static void DisplayArray(byte[] b)
{
Console.WriteLine(BitConverter.ToString(b,0));
for (int i = 0; i < b.Length; i++)
Console.Write(b[i].ToString("0000")+" ");
Console.WriteLine(); Console.WriteLine(BitConverter.ToString(b, 0));
Console.WriteLine();
}得到的结果:
-------------------
UNICODE Encoding: 2 bytes
2D-4E
0045 0078
2D-4EUTF8 Encoding: 3 bytes
E4-B8-AD
0228 0184 0173
E4-B8-AD
-----------------以UTF8为例:
byte[] stringbyte = BitConverter.GetBytes(Convert.ToInt32("E4B8AD", 16));
这里得到的stringbyte长度为4
0173 0184 0228 0000
且数据倒置了,也就是说用这个stringbyte得不到“中”字
Console.WriteLine(Encoding.UTF8.GetString(stringbyte));笨办法:
byte[] stringbyte = BitConverter.GetBytes(Convert.ToInt32("E4B8AD", 16));
byte[] newstringbyte = new byte[3];
newstringbyte[0] = stringbyte[2];
newstringbyte[1] = stringbyte[1];
newstringbyte[2] = stringbyte[0];
Console.WriteLine(Encoding.UTF8.GetString(newstringbyte));
可以得到正确结果。建议楼主多试几个编码的对应关系,找出其中存在的问题。