对编码不是很了解
最近写个串口通讯的程序,发现串口最多只能发送8个数据位的字符,所以将汉字转化为byte发送后,接收端会自动减去128的倍数,得到0~128之间的数
比如发送某汉字,转化为byte后为b[0]=138,接收端接收到的就是b[0]=10
而串口最高只能发送8个数据位的字符,所以只能解决汉字的编码问题
请问解决这个问题~~
最近写个串口通讯的程序,发现串口最多只能发送8个数据位的字符,所以将汉字转化为byte发送后,接收端会自动减去128的倍数,得到0~128之间的数
比如发送某汉字,转化为byte后为b[0]=138,接收端接收到的就是b[0]=10
而串口最高只能发送8个数据位的字符,所以只能解决汉字的编码问题
请问解决这个问题~~
1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。
GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。
GB2312将代码表分为94个区,对应第一字节(0xa1-0xfe);每个区94个位(0xa1-0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。
2、Big5又称大五码,主要为香港与台湾使用,即是一个繁体字编码。每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE(即129-255),共126种。第二个字节的范围不连续,分别为0X40-0X7E(即64-126),0XA1-0XFE(即161-254),共157种。
3、GBK是GB2312的扩展,是向上兼容的,因此GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含繁体字的编码,它与Big5编码之间的关系我还没有弄明白,好像是不一致的。GBK中每个汉字仍然包含两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。
谢谢LS几位~
{
string test = "Clinique 倩碧";
Console.WriteLine((int)char.MaxValue);
Char[] charArr = test.ToCharArray();
Encoding ED = Encoding.GetEncoding("gb2312");
foreach (char c in charArr)
{
byte[] B = ED.GetBytes(new char[] { c });
Console.WriteLine("" + c + ":" + (int)c + ":" + ED.GetString(B) + ":0x" + Convert.ToString(c,16) );
}
byte[] B1 = ED.GetBytes(new char[] { (char)0x5029 });
Console.WriteLine(ED.GetString(B1));
byte[] B2 = ED.GetBytes(new char[] { (char)0x78a7 });
Console.WriteLine(ED.GetString(B2)); for (int i = 0; i < 256; i++)
{
//Console.WriteLine(i.ToString() + ":" + Encoding.ASCII.GetString(new byte[] { (byte)i }));
}
//Console.WriteLine(byte.MaxValue);
Console.Read();
}