黑马程序员技术交流社区
标题:
编码问题
[打印本页]
作者:
杨威
时间:
2012-5-10 09:55
标题:
编码问题
当我们用一种编码表对一个字符进行编码后,如果用另一个编码表区读的时候,就会出现乱码,比如用GBK编码表对“你好”进行后得到的编码是 -60 -29 -70 -61,而用iso8859-1去读就会出现乱码。
我的疑惑是那我们直接获取原来的编码数-60 -29 -70 -61再用GBK码表来读不就可以了吗?干嘛还用另一个编码(比如iso8859-1)表对其再进行编码然后再用GBK码表来读?毕竟有时候如果两个码表都识别中文再按照上面的操作就得不到原来的字符了(比如将上面操作中的iso8859-1码表换成utf-8)?
作者:
周素强
时间:
2012-5-10 10:13
通过再编码的动作就是为了得到数据的原来的编码数,因为每个编码表所占用的字节不同所以必需这样才能得到。另外GBK和UTF-8之间转错后不能通过此方法解决,因为两个编码表中都存在中文。
ASCII:美国标准信息交换码
用一个字节的7位表示
ISO8859-1:拉丁码表、欧洲码表
用一个字节的8位表示
GB2312:中国的中文编码表
GBK:中国的中文编码表升级版
用两个字节来表示一个汉字
Unicode:国际校准码表。
所有文字都用两个字节来表示,java语言使用的就是Unicode
UTF-8:最多用三个字节来表示一个字符。
作者:
徐然
时间:
2012-5-10 10:49
这个一定是听了毕老师讲编码的时候产生的疑惑吧,
你没注意的是,他讲过UTF-8和GBK码表之间出现了用错码表解码后无法再次编码解码解决
他举的例子是GBK和iso8859-1之间出现问题的解决方法
并且是以发报机为例,A端对"你好"用GBK编码后把编码号发给B端,B端接收后错误得用iso8859-1解码,获得四个?,
那么B端不可能打电话问A端发的码号是什么,只有自己再次用iso8859-1再次编码解决,再次编码以后,还会获得A端发过来的码号
这样就可以再用GBK进行解码获得正确数据了
作者:
小鹿叙鹿
时间:
2012-5-10 20:35
既然用GBK进行了编码,要对其进行正确的解码,有2中方式
第一:就是通过GBK进行解码,这肯定不会出现问题
第二:就是当我们在解码的时候不小心用别的码表就行解码,这时就会产生乱码问题,所以要通过解错的编码来获得源码,
再用GBK进行解码。如果你编码错误,那是无法正确编码的。
第三:用GBK编码时再用UTF-8解码时为什么会出错呢?
那是因为,有些汉字在UTF-8中没有找到对应的数字,就用未知“?”表示,而其对应的有数字
所以当你再用utf-8解码时,得到的是“?”,所以还是出现解码错误、
作者:
黄坚声
时间:
2012-5-10 23:37
哥们,你忘了一个问题了,那就是解码。编码和解码方案要统一,否则容易出现乱码。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2