研究一下,想实现,编码和字符的转换并显示。
昨天在另一贴里解决了大部分问题,但还有部分字符没能显示正常,在EXCEL中显示正常。
以下代码由Jinglecat提供
int n = int.Parse("30E0", System.Globalization.NumberStyles.AllowHexSpecifier);
        byte[] bytes = BitConverter.GetBytes(n);
        string str = System.Text.Encoding.Unicode.GetString(bytes); // 输出 ム

解决方案 »

  1.   

    int n = int.Parse("30E0", System.Globalization.NumberStyles.AllowHexSpecifier);你怎么得到这个30E0的?
      

  2.   

    TO wangsaokui(无间道III(终极无间)C#MVP) 
    客户给的文档里有字符和编码的对应关系,我要导入数据库,所以希望根据编码转换为字符保证字符的准确性
    u8编码的字符转为unicode的字符方法很多,我现在的问题是从编码转字符,找了一上午也没结果
      

  3.   

    编码之间的转换(字节数组),编码与字符串的转换,Encoding类都有现成的方法
      

  4.   

    Encoding.Convert(Encoding.Unicode,Encoding.UTF8,bytes)
      

  5.   

    怎么把编码转换成字节数组呢?
    我一直在研究,一头雾水
    这个方法应该是对的,但有部分字符就是显示为方格,无法识别
    int n = int.Parse(tt[i], System.Globalization.NumberStyles.AllowHexSpecifier);
      

  6.   

    Encoding.Unicode.GetBytes(StringYours);
    Encoding.Convert(Encoding.Unicode,Encoding.UTF8,bytes)
    如果这两句你真的明白了 我想你的问题就解决了
    这两句可以进行几乎所有需要的字符编码转换
      

  7.   

    StringYours是一个正常的以Unicode编码的字符串,还是编码?我理解为是字符串第二句是将Unicode转为UTF8不知理解是否有误?
      

  8.   

    字符串都是Unicode编码的,其他编码只能是字节数组~
      

  9.   

    我试着定义了一个
    byte[] bytes = new byte[] {3,0,4,2};
    将其做为参数进行转换,得到的字符只是两个方格
      

  10.   

    StringYours是以Unicode编码的字符串byte[] bytes=Encoding.Unicode.GetBytes(StringYours);就能获得他对应的byte[]Encoding.Convert(Encoding.Unicode,Encoding.UTF8,bytes)就能获得对应的utf8的byte[]byte[].toString()就能获得对应的字符串
      

  11.   

    如果你已经有了string
    Encoding.UTF8.GetBytes(StringYours)就是utf8编码的byte数组。另外,UTF8,UTF7,Unicode(UTF16)的Unicode值是一样的,只是存放形式不一样而以。其他GB2312等则是有自己的一套编码体系。
      

  12.   

    我做了个测试string test = "中";byte[] unicb;
    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));
    可以得到正确结果。建议楼主多试几个编码的对应关系,找出其中存在的问题。