C# 里面的编码问题

 

1  .NET中的String只有Unicode一种。所以编码格式的字节序列转换成String时最终都是以Unicode表示。

2 System.Text.Encoding.Default是取系统的当前ANSI代码页的编码,即当前系统的编码。(在我们的机子上一般都是"gb2312")这就每次用Default读取文件流都正确,且必须用Default读取才正确的原因----其实用Encoding.GetEncoding("GB2312")也一样。  

3  String-->byte[](Unicode-->other) 
//string 转成default编码的byte[],编码采用default,我们机器上大部分为gb2312
string a="china中文乱码";
byte[]   abyte   =   System.Text.Encoding.Default.GetBytes(a);   

byte[]-->String(other-->Unicode)
string b = null;
byte[] bbyte = null;
bbyte 
= new byte[100];
PrintStr(abyte,bbyte); 
//得到byte[]
//System.Text.Encoding     ed=   System.Text.Encoding.GetEncoding("GB2312"); 
System.Text.Encoding     ed=  System.Text.Encoding.Default; //编码,和用gb2312一样
b  =   ed.GetString(bbyte); //取得正确编码后的string
StreamReader(string  path, System.Text.Encoding  encoding]),Response.Charset,这就相当于你告诉系统byte[]是什么编码,这时候.NET用你指定的编码方式去解码,然后转换成Unicode编码方式的String.  
也就是说,不管何时,我们所指定的编码都只是指byte[]。  
即Encoding.UTF8.GetString(byte[]   buffer)是告诉系统buffer的编码是UTF8。
byte[]   buf =  Encoding.UTF8.GetBytes(string str)是告诉系统返回的buf编码方式是UTF8。  
字节序是按指定编码方式编码,它有一个特定的编码方式,但它本身是中性的,不含有任何编码信息。   
   

### 在 C# 中将字符串 'In' 转换为 byte 类型的方法 在 C# 中,将字符串转换为字节数组可以通过 `System.Text.Encoding` 命名空间中的编码类来实现。以下是一个示例代码,展示如何将字符串 "In" 转换为字节数组: ```csharp using System; using System.Text; class Program { static void Main() { string str = "In"; byte[] byteArray = Encoding.UTF8.GetBytes(str); // 使用 UTF-8 编码[^3] foreach (byte b in byteArray) { Console.WriteLine(b); } } } ``` 上述代码中,`Encoding.UTF8.GetBytes` 方法将字符串按照 UTF-8 编码规则转换为字节数组。如果需要使用其他编码格式(如 ASCII 或 GB2312),可以替换为相应的编码类。 此外,如果需要将十六进制字符串(例如 "0055")转换为字节数组,可以参考以下方法: ```csharp static byte[] StringToByte(string str) { if (str.Length % 2 != 0) { str += "0"; // 如果是奇数长度,补 0[^2] } byte[] temp = new byte[str.Length / 2]; for (int i = 0; i < temp.Length; i++) { temp[i] = Convert.ToByte(str.Substring(i * 2, 2), 16); // 每两位转换为一个字节 } return temp; } static void Main() { string hexStr = "0055"; byte[] byteArray = StringToByte(hexStr); foreach (byte b in byteArray) { Console.WriteLine(b.ToString("X2")); // 输出十六进制格式[^2] } } ``` 这段代码适用于将类似 "0055" 的十六进制字符串转换为字节数组。 对于从字节数组转换回字符串的操作,可以使用 `Encoding.UTF8.GetString` 方法: ```csharp byte[] byteArray = { 73, 110 }; // 对应 "In" 的 UTF-8 编码 string result = Encoding.UTF8.GetString(byteArray); // 将字节数组转换为字符串[^3] Console.WriteLine(result); // 输出 "In" ``` ### 注意事项 - 字符串到字节数组的转换依赖于编码格式的选择。不同的编码格式会导致不同的字节表示。 - 在处理十六进制字符串时,确保字符串长度为偶数,否则可能导致转换错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值