代码页
最近写一个网络程序时,碰到字符串和字节数组之间的转换问题,开始时还比较简单,字符串都是标准的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;
得到了我想要的东西:
编码名称: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 内容:8œœ8 两次转换能否还原:成功
编码名称:阿拉伯字符(DOS) 编码代码:720 是否单字节:True 字符串长度:4 内容:8££8 两次转换能否还原:成功
编码名称:希腊字符(DOS) 编码代码:737 是否单字节:True 字符串长度:4 内容:8εε8 两次转换能否还原:成功
编码名称:OEM 西里尔语 编码代码:855 是否单字节:True 字符串长度:4 内容:8юю8 两次转换能否还原:成功
有兴趣还可以检查其他的代码页,这是源代码: http://files.cnblogs.com/jetz/WindowsApplication1.rar
- WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)
- 《WCF技术剖析》博文系列汇总[持续更新中]
- 关于服务器的运行寿命 你应该知道这些事
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
- WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
- 树大招风:细数2017年加密货币市场的幺蛾子事件
- 如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[上篇]
- 5个典型实例启发:什么是数据可视化
- 智能家居“智商”不够,能靠情商来补吗
- 大话MVP
- AngularJS in Action读书笔记1——扫平一揽子专业术语
- MS Enterprise Library 5.0发布!!
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android Studio中主题样式的使用方法详解
- android点击无效验证的解决方法
- Android Studio 3.5格式化布局代码时错位、错乱bug的解决
- Android实现时钟特效
- 解决Android Studio Design界面不显示layout控件的问题
- Android读写文件工具类详解
- Kotlin实现在类里面创建main函数
- AndroidStudio 设置格式化断行宽度教程
- 从 SpringBoot 到 SpringMVC
- AndroidManifest.xml中含盖的安全问题详解
- Android Studio实现格式化XML代码顺序
- android自动生成dimens适配文件的图文教程详解(无需Java工具类)
- Android Studio自动提取控件Style样式教程
- 基于Android studio3.6的JNI教程之ncnn人脸检测mtcnn功能
- Kotlin 使用Lambda来设置回调的操作