一个汉字在 ASC ,UTF-8 ,UTF-32,Unicode编码中占几个字节 解决立结

时间:2023-01-11 10:21:24
如题:一个汉字在 ASC ,UTF-8 ,UTF-32,Unicode编码中占几个字节 

是好能给个程序证明一下结果,我不会写所以,希望高手帮助一下,解决立即结分,谢谢您了

15 个解决方案

#1


如下所述,自己转换16进制为2进制就获得了字节数

比如 "國家"這個詞,在繁體操作系統中用Notepad
保存為ANSI,
查看16進制碼為B0 EA AE 61 

Unicode big endian 
16进制码为: FE FF 57 0B 5B B6 
FE FF 标记Unicode big endian的字符编码 

Unicode 
16進制碼為: FF FE 0B 57 B6 5B 
FF FE 标记Unicode的字符编码 

UTF-8 
16進制碼為: EF BB BF E5 9C 8B E5 AE B6 
EF BB BF 标记Unicode的字符编码 

#2


最简单的就是,在NotePad输入"国家",然后保存成不同的字符集,比如ANSI,UNICODE,UTF8等
然后用file.ReadAllBytes 取出来就知道了

#3


该回复于2010-01-19 17:26:19被版主删除

#4


直接用C#达不到测试的目地吗?

#5



 System.Text.Encoding.ASCII.GetByteCount("mmm");
                System.Text.Encoding.UTF8.GetBytes("mm");
                System.Text.Encoding.UTF32.GetBytes("");
                System.Text.Encoding.Unicode.GetBytes("");

#6


5楼给的就是我之前提过的GetTypes的方式
我给的是解释几种编码方式之间的区别

引用 4 楼 iui7000 的回复:
直接用C#达不到测试的目地吗?

#7


汉字不可能保存为 ASCII 码的。

#9


using System;
using System.Text;

class Program
{
  static void Main()
  {
    foreach (Encoding e in new Encoding[]{ Encoding.UTF8,Encoding.UTF32,Encoding.Unicode })
    {
      Console.WriteLine("{0}:\t{1}字节", e, e.GetByteCount("汉"));
    }
  }
}
/* 输出:
System.Text.UTF8Encoding:    3字节
System.Text.UTF32Encoding:   4字节
System.Text.UnicodeEncoding: 2字节
*/

#10


楼主可能弄错了,应该是ANSI

引用 7 楼 *8808 的回复:
汉字不可能保存为 ASCII 码的。

#11


using System;
using System.Text;

class Program
{
  static void Main()
  {
    foreach (Encoding e in new Encoding[]{ Encoding.GetEncoding("GB18030"),Encoding.UTF7,Encoding.UTF8,Encoding.UTF32,Encoding.Unicode })
    {
      Console.WriteLine("{0}:\t{1}字节", e, e.GetByteCount("汉"));
    }
  }
}
/* 输出:
System.Text.GB18030Encoding: 2字节
System.Text.UTF7Encoding:    5字节
System.Text.UTF8Encoding:    3字节
System.Text.UTF32Encoding:   4字节
System.Text.UnicodeEncoding: 2字节
*/

#12


ACSII,每个字符对应一个字节,实际上只使用了7位,从00h-7Fh。只能表达128个字符。
GB2312,中文的一种编码,每个字符使用两个字节表示。
UTF-8, 可以表达所有unicode字符,每个字符可以用1-3个字节表示。
UTF-16, 可以表达所有unicode字符,每个字符可以用1-2个16位整数表示。
UTF-32, 可以表达所有unicode字符,每个字符可以用1个32位整数表示。
System.Text.Encoding.Default.GetByteCount(Str.Trim());
参考

#13


我有罪哦,居然引来这么多高手,我小小的100分给谁哦,哪位给个方案

#14


给我吧,呵呵。。

#15


今天看了编码乱,感觉明白了不少。基础知识真的很重要!

#1


如下所述,自己转换16进制为2进制就获得了字节数

比如 "國家"這個詞,在繁體操作系統中用Notepad
保存為ANSI,
查看16進制碼為B0 EA AE 61 

Unicode big endian 
16进制码为: FE FF 57 0B 5B B6 
FE FF 标记Unicode big endian的字符编码 

Unicode 
16進制碼為: FF FE 0B 57 B6 5B 
FF FE 标记Unicode的字符编码 

UTF-8 
16進制碼為: EF BB BF E5 9C 8B E5 AE B6 
EF BB BF 标记Unicode的字符编码 

#2


最简单的就是,在NotePad输入"国家",然后保存成不同的字符集,比如ANSI,UNICODE,UTF8等
然后用file.ReadAllBytes 取出来就知道了

#3


该回复于2010-01-19 17:26:19被版主删除

#4


直接用C#达不到测试的目地吗?

#5



 System.Text.Encoding.ASCII.GetByteCount("mmm");
                System.Text.Encoding.UTF8.GetBytes("mm");
                System.Text.Encoding.UTF32.GetBytes("");
                System.Text.Encoding.Unicode.GetBytes("");

#6


5楼给的就是我之前提过的GetTypes的方式
我给的是解释几种编码方式之间的区别

引用 4 楼 iui7000 的回复:
直接用C#达不到测试的目地吗?

#7


汉字不可能保存为 ASCII 码的。

#8


#9


using System;
using System.Text;

class Program
{
  static void Main()
  {
    foreach (Encoding e in new Encoding[]{ Encoding.UTF8,Encoding.UTF32,Encoding.Unicode })
    {
      Console.WriteLine("{0}:\t{1}字节", e, e.GetByteCount("汉"));
    }
  }
}
/* 输出:
System.Text.UTF8Encoding:    3字节
System.Text.UTF32Encoding:   4字节
System.Text.UnicodeEncoding: 2字节
*/

#10


楼主可能弄错了,应该是ANSI

引用 7 楼 *8808 的回复:
汉字不可能保存为 ASCII 码的。

#11


using System;
using System.Text;

class Program
{
  static void Main()
  {
    foreach (Encoding e in new Encoding[]{ Encoding.GetEncoding("GB18030"),Encoding.UTF7,Encoding.UTF8,Encoding.UTF32,Encoding.Unicode })
    {
      Console.WriteLine("{0}:\t{1}字节", e, e.GetByteCount("汉"));
    }
  }
}
/* 输出:
System.Text.GB18030Encoding: 2字节
System.Text.UTF7Encoding:    5字节
System.Text.UTF8Encoding:    3字节
System.Text.UTF32Encoding:   4字节
System.Text.UnicodeEncoding: 2字节
*/

#12


ACSII,每个字符对应一个字节,实际上只使用了7位,从00h-7Fh。只能表达128个字符。
GB2312,中文的一种编码,每个字符使用两个字节表示。
UTF-8, 可以表达所有unicode字符,每个字符可以用1-3个字节表示。
UTF-16, 可以表达所有unicode字符,每个字符可以用1-2个16位整数表示。
UTF-32, 可以表达所有unicode字符,每个字符可以用1个32位整数表示。
System.Text.Encoding.Default.GetByteCount(Str.Trim());
参考

#13


我有罪哦,居然引来这么多高手,我小小的100分给谁哦,哪位给个方案

#14


给我吧,呵呵。。

#15


今天看了编码乱,感觉明白了不少。基础知识真的很重要!