编码问题

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头都含有编码信息,浏览器据此正确显示

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值