none
请教一个C#中的编码问题 RRS feed

  • 问题

  • 比如有一个文本文件,里面有一个汉字,C#程序读取这个字的时候是用public StreamReader(
     Stream stream,
     Encoding encoding。Default)也就是用ansi编码读的那么C#程序里用char存这个字的时候是不是把ansi编码转为了unicode编码
    2010年7月22日 4:13

答案

  • using System.Text;

    public static string convert(Encoding from,Encoding to,string input)
    {
    try
    {

    byte[] source = Encoding.Default.GetBytes(input);
    byte[] utf8 = Encoding.Convert(from,to, source);
    return Encoding.UTF8.GetString(utf8);
    }
    catch (Exception ee)
    {
    return string.Empty;
    }
    }

    http://blog.csdn.net/zx13525079024
    2010年7月22日 4:55
  • Encoding.Default 是返回操作系统环境的默认编码方案。所以可能会是 ASCII 或者 Unicode 或者其他自动以编码,如 GB2312.

    注意 C# 的 char 类型和 string 一样也是 Unicode 的,所以把一个 int 值转换成 char 后,它代表其 Unicode 值为该 int 值的字符,如 char c = (char)65 表示大写字母 A。


    Mark Zhou
    2010年7月22日 10:08
  • 你好!

        首先.NET下的char类型代表的就是Unicode字符了,所以你存在这样的变量里的就是Unicode字符。

        Encoding.Default获取操作系统的当前 ANSI 代码页的编码,用户是可以设置的, 不同的操作系统可能会将不同的编码用作默认编码。 因此,从一个操作系统流向其他操作系统的数据可能转换不正确。 若要确保编码后的字节能够正确解码,应用程序应当使用带前导码的 Unicode 编码(即 UTF8Encoding UnicodeEncoding UTF32Encoding


    周雪峰
    2010年7月22日 12:59
    版主

全部回复

  • using System.Text;

    public static string convert(Encoding from,Encoding to,string input)
    {
    try
    {

    byte[] source = Encoding.Default.GetBytes(input);
    byte[] utf8 = Encoding.Convert(from,to, source);
    return Encoding.UTF8.GetString(utf8);
    }
    catch (Exception ee)
    {
    return string.Empty;
    }
    }

    http://blog.csdn.net/zx13525079024
    2010年7月22日 4:55
  •  Encoding.Default 读取汉字并不是代表用ASCII码去读的,一般情况下Encoding.Default等同于Encoding.UTF8.

    使用CHAR函数的时候也不会把ASCII转换为UNICODE,只是试图将ASCII吗变成可显示的字符。如果需要将字节数组转换为Unicode的字符串可用 Encoding.Unicode.GetString()

    2010年7月22日 5:09
  • Encoding.Default 是返回操作系统环境的默认编码方案。所以可能会是 ASCII 或者 Unicode 或者其他自动以编码,如 GB2312.

    注意 C# 的 char 类型和 string 一样也是 Unicode 的,所以把一个 int 值转换成 char 后,它代表其 Unicode 值为该 int 值的字符,如 char c = (char)65 表示大写字母 A。


    Mark Zhou
    2010年7月22日 10:08
  • 你好!

        首先.NET下的char类型代表的就是Unicode字符了,所以你存在这样的变量里的就是Unicode字符。

        Encoding.Default获取操作系统的当前 ANSI 代码页的编码,用户是可以设置的, 不同的操作系统可能会将不同的编码用作默认编码。 因此,从一个操作系统流向其他操作系统的数据可能转换不正确。 若要确保编码后的字节能够正确解码,应用程序应当使用带前导码的 Unicode 编码(即 UTF8Encoding UnicodeEncoding UTF32Encoding


    周雪峰
    2010年7月22日 12:59
    版主