代码页
最近写一个网络程序时,碰到字符串和字节数组之间的转换问题,开始时还比较简单,字符串都是标准的Ascll编码,处理起来比较简单:
字符串转字节数组 byte [] bts=Encoding.ASCII.GetBytes(str);
字节数组转字符串 string str=Encoding.ASCII.GetString(bts);
但是后来发送的数据不仅仅是Ascii码了,而是连普通字节都有,这种情况下,就比较麻烦了,因为ASCII代码页(这还是后来才学到的)只支持7个位,也就是说,高位为1的话,全部被转化为63,显示为?。逆向转换就不行了。
在网上学习,知道了其实编码规则是由许多的代码页决定的,但vs2005帮助里只提到几种编码:utf-8,utf-7,unicode等,基本都是多字节的。
我希望的,还是单字节的代码页,能够支持全字节的转换的,127之上的字节,显示为乱码也无所谓。
关于代码页,http://amoderlan.blogbus.com/logs/4860636.html 比较靠谱,其他还有一些,列的东西到多,但是很多都是空的,难于检查。
为了得到我想要的东西,写了一小段程序,检查各个代码页的效果。
byte[] bys=new byte[4];
bys[0] = 56;
bys[1] = 156;
bys[2] = 156;
bys[3] = 56;

byte[] b2 = new byte[4];
Encoding en = Encoding.GetEncoding(20127);
string ret = "";
ret += "编码名称:" + en.EncodingName + Environment.NewLine;
ret += "编码代码:" + en.CodePage.ToString() + Environment.NewLine; ;
ret += "是否单字节:" + en.IsSingleByte.ToString() + Environment.NewLine;
ret += "字符串长度:" + en.GetString(bys).Length.ToString() + Environment.NewLine;
ret += "内容:" + en.GetString(bys) + Environment.NewLine;
b2 = en.GetBytes(en.GetString(bys));
string dc="成功";
for (int i = 0; i < bys.Length; i++)
{
if (bys[i] != b2[i]) dc = "失败";
}
ret += "两次转换能否还原:" + dc+Environment.NewLine;
textBox1.Text = ret;
得到了我想要的东西:
字符串转字节数组 byte [] bts=Encoding.ASCII.GetBytes(str);
字节数组转字符串 string str=Encoding.ASCII.GetString(bts);
但是后来发送的数据不仅仅是Ascii码了,而是连普通字节都有,这种情况下,就比较麻烦了,因为ASCII代码页(这还是后来才学到的)只支持7个位,也就是说,高位为1的话,全部被转化为63,显示为?。逆向转换就不行了。
在网上学习,知道了其实编码规则是由许多的代码页决定的,但vs2005帮助里只提到几种编码:utf-8,utf-7,unicode等,基本都是多字节的。
我希望的,还是单字节的代码页,能够支持全字节的转换的,127之上的字节,显示为乱码也无所谓。
关于代码页,http://amoderlan.blogbus.com/logs/4860636.html 比较靠谱,其他还有一些,列的东西到多,但是很多都是空的,难于检查。
为了得到我想要的东西,写了一小段程序,检查各个代码页的效果。























得到了我想要的东西:
编码名称:US-ASCII
编码代码:20127
是否单字节:True
字符串长度:4
内容:8??8
两次转换能否还原:失败
编码名称:IBM EBCDIC (美国-加拿大)
编码代码:37
是否单字节:True
字符串长度:4
内容:ææ
两次转换能否还原:成功
编码名称:OEM 美国
编码代码:437
是否单字节:True
字符串长度:4
内容:8££8
两次转换能否还原:成功
编码名称:IBM EBCDIC (国际)
编码代码:500
是否单字节:True
字符串长度:4
内容:ææ
两次转换能否还原:成功
编码名称:阿拉伯字符(ASMO-708)
编码代码:708
是否单字节:True
字符串长度:4
内容:88
两次转换能否还原:成功
编码名称:阿拉伯字符(DOS)
编码代码:720
是否单字节:True
字符串长度:4
内容:8££8
两次转换能否还原:成功
编码名称:希腊字符(DOS)
编码代码:737
是否单字节:True
字符串长度:4
内容:8εε8
两次转换能否还原:成功
编码名称:OEM 西里尔语
编码代码:855
是否单字节:True
字符串长度:4
内容:8юю8
两次转换能否还原:成功
有兴趣还可以检查其他的代码页,这是源代码:
https://files.cnblogs.com/jetz/WindowsApplication1.rar
分类:
ASP.NET+C#
, C#桌面应用
标签:
C#代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」