ucs-2规范 unicode采用2个字节 65536个字符
汉字 0x4e00--0x9fa5
ucs-4规范 采用4个自己
ucs没有规定存储方式
utf规定存储方式
utf-16 ucs-2的完全对应
utf-16(big endian)高位在前
utf-16(little endian)低位在前
utf 高位在前
windows xp记事本另存为的 unicode unicode(bif endian)即为此
utf-8 记事本打开utf-8编码文件头部 都又 ef bb bf 倒过来 bfbbef的字段
另一种存储方式
UCS-2 (UCS-4) 位序列 第一字节 第二字节 第三字节 第四字节
U+0000 .. U+007F 00000000-0xxxxxxx 0xxxxxxx
U+0080 .. U+07FF 00000xxx-xxyyyyyy 110xxxxx 10yyyyyy
U+0800 .. U+FFFF xxxxyyyy-yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz
U+10000..U+1FFFFF 00000000-000wwwxx-
xxxxyyyy-yyzzzzzzz 11110www 10xxxxxx 10yyyyyy 10zzzzzz
GB2312 7445 两个字节
GBK 21886 两个字节
GB18030-2000 27533个汉字. 2和4个
GB18030-2005 有70244个 2 和4个
使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,
在日文操作系统下,ANSI 编码代表 JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语
言的文字,存储在同一段 ANSI 编码的文本中。
搜狗输入法生产gbk编码(默认,可以改),当输入到.net编辑器的时候,(变成utf_8的,只知道最红的cs文件是utf-8的?大概推测
是程序,程序如果需要什么样的,会自己转换)变成utf_8
最终 .cs文件存储的是utf_8编码, 当到exe文件的时候全部变为unicode,包括字符串,所以可能它不会出现乱码
记事本测试:
从unicode记事本中写入文件,unicode输入法,gbk输入法都转为unicode编码
从ansi记事本写入文件,unicode输入法,gbk输入法都转为ansi编码
将utf-8网页拷贝入ansi文件,转为ansi编码,又不能转换的提示"此……………………"
最终
.net编辑器将编码转为utf-8
网页输入框测试
asp网页,默认gb2312,输入框输入 啊啊啊啊啊 抓包工具抓到 systempath=%B0%A1%B0%A1%B0%A1%B0%A1
格式 gb2312
aspx网页 ,utf-8 ,输入 啊啊啊啊 抓包抓到 TextBox2=%E5%95%8A%E5%95%8A%E5%95%8A%E5%95%8A%E5%9 utf- 8格式
html页测试 gb2312 啊啊 systempath=%B0%A1%B0%A1%B0%A1%B0%A1&sAvedata=
同一网页 改为 tuf-8 ystempath=%E5%95%8A%E5%95%8A
百度首页 gb2312 wd=%B0%A1%B0%A1%B0%A1%B0%A1%B0%A1
由此得出我的结论,网页输入框内的编码跟网页所属编码形同,是经过处理的,不是输入法输入的
unicode程序,输入框内的数据目前认为都是unique的。具体在研究
exe文件没有语言之分,全都是代码
其中的资源文件等包含标题,按钮上的文字的区域表明了自己的语言版本
(c#开发的貌似都是unicode,可能是我选择生成了这样的;一些外国软件乱码
,软件没有问题,不过要在电脑-控制面板-语言中加上那个国家,具体是这个
软件使用的语言代码页,以供操作系统转换。要是这样,还有个问题,这个表示
自己语言编码的位置在哪?)
所有的文件,如txt,html,cs都会在开头加上标志,表明自己的语言编码
txt解析器可以解析unicode,utf-8,ansi
.net解析器可以解析utf-8,ansi
html解析器可以解析绝大部分,根据文件http头
从测试结果可以看出,浏览器(无论是IE还是Firefox)在解析页面时,首先取HTTP Header中的Content-Type项,如果有写明charset的话就认定页面的编码方式为charset指定的值。如果没有指明,则认定为默认值。根据上表,IE中文版的默认值是GB2312,Firefox中文版的默认值是GBK,不过IE的GB2312好像和GBK没啥区别。然后,浏览器会看一下有没有BOM。一旦发现有UTF-8的3字节BOM,则重新认定页面的编码方式为UTF-8。
然后是解码阶段,解码完成后是解析html的阶段。解析html的过程中,当解析到head部分的meta标签时,浏览器会根据<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />这个语句中的说明,重新认定编码方式为charset后面的方式,中断html解析过程,返回到解码步骤重新解码。
即使是这样的 bom在哪 一直没找到
输入框内输入的是输入法的编码
一般程序会有自己的转换,记事本,c#socket,
目前测试结果
网页发送text框等发送的编码与它所声明的编码相同
网页解析按<meta http-equiv="content-type" content="text/html;charset=gbk2312;">,至少最终是
如果没有则按照 ansi解析
html文件发送来的时候包含 bom因此网页在没有meta时能按此显示,但是asp等文件是经过处理的,没有meta时不能正确显示
测试这些时不知道为什么http头里没有编码信息
aspx网页http头都含有编码信息,浏览器据此正确显示