请问我的电脑出现好像是乱码。就是字体变成符号????游戏找不到u盘文件乱码打不开打不开?(相机坏了拍不了。)

西西软件园多重安全检测下载网站、值得信赖的软件下载站!
→ web程序网页出现乱码的原因分析
1.0 官方正式版
类型:游戏其他大小:1.1M语言:中文 评分:4.1
从第一次开始写web程序,自己还有身边同事开发出现乱码情况基本都没有消停过。估计以后还会一样继续。 这么些年,不断修修改改,也总结也归纳。程序从asp,asp.net,jsp,php,服务器从windows到linux,也从sqlserver,mysql到oracle;它还是偶尔会出现。 好了,我总结下我与它较量的一些收获吧。乱码都与字符集有关系,一切都从它开始说。
&什么是字符集,什么是字符,它做什么用?
字符(Charcter)是文字与符号的总称,包括文字、图形符号、数学符号等。而字符集是一组抽象的字符组合的集合。如:英文字符集,中文字符集,日文字符集等
什么是字符编码?
计算机只能存储0,1之类2进制数字,怎么样让它表示那么多各种各样的字符呢?就需要对各种字符指定一个数值的编码代号它就是字符编码。如:a这个字符,在ascii字符集编码表中对应的编号是97,而“中”在gb2312字符集中对应的编号是:16进制是D6D0 10进制是54992 。通过编号就可以找到计算机对应字符。不用将那么复杂的字符保存在计算机中,只需要保存它代号就好。字符集只是指定了一个集合中有哪些字符,而字符编码,是为这个集合中所有字符定义个编号,这就是字符集与编码区别所在。
&如果我告诉别人,我这个字符是:gb2312字符集中编号是:54992或者是D6D0 ,无论那个程序都知道是”中”,如果有人听错了,把它弄成日文JIS字符集,然后他也去找编号是:54992对应的字符,却找到的是:”面“。
打了这个比方,相信大家找到原因了,同样如果把54992拿到ascii 码表找,就会得到对应:�� 两个不能打印字符了。
从上面看,当你拿到本来是gb2312编号,在不是它的字符集里面找就出现这样问题了。 其它,程序出现乱码也都是这个原因,找错了字符集表了.
字符在计算机是怎么样存储的呢?
看了上面介绍,我想大家一定会说,如果所有文本的字符,都用它的符号存储在计算机里面,不就什么问题都么有吗? 以前也这么想,后来一想啊,如果都存在计算机中,各种各样,怎么样表示呢?计算机处理01之类数字该多方便呢。
我们可以通过实际来检查下,下面在简体中文下,将”中按照gb2312字符集编码保存。
以gb2312编码保存中文“中”,实际存储在计算机中是:D6D0,是“中”在字符集gb2312中的编号啦!
计算机中只保存字符在某字符集中对应的字符编号值,计算机只需要维持一份字符集清单,当读到这种编号值(编码),就在对应字符清单中找出该字符显示出来即可。字符大小颜色都是程序按照字符样式绘制而成的。
计算机中只保存该字符在某字符集中对应的字符编号(也叫字符编码)
&怎么样读取文件并正确显示文件内容?
从上面例子知道字符实际以该字符在某字符集中字符编码存储与计算机磁盘中。
下面以“中国”为例(中文简体windows):
以下以:“abc”为例
从上面可以得到几点:
1、以某字符集存储字符时,它会在该字符集中搜索这个字符的位置(编号或编码),以这个编号(编码)保存在文件,如果所搜找不到该字符,一般会以:3F 3F保存(一定会出错)
2、当需要显示字符,从取文件中字符编码,如果没有指定字符集,会通过文件头(主要unicode字符集有特殊头标记)判断字符集,如果不是unicode字符集,默认都以ANSI字符集读取,用字符编码在该字符集中寻找对应字符,如果搜索到就正常显示,搜索不到就会显示乱码.
&常见问题字符疑问收集
什么是ANSI字符集?
& 这个不是固定字符集,如果在中文简体windows中,它代码字符集是gb2312,在繁体值代表是big5等等。
&为什么英文字符不会出现乱码?
& 常见ascii码字符集是:128字符,对应编码值是:1-128 ,二进制表示是:11111。它表示了所有常见英文数字,标点符号。其它字符集都是由ascii码字符集扩展而来,扩展了最高位由开始,用多字节表示新的字符,基本都保留了:0xxxxxxx 开头128个基本字符,而且对应编码与ascii码相同。
这样,常见英文字符不论在那种字符集中,对应字符编码一致,存储编码也一样。读取时候无论用什么字符集读取,它所对应字符也一直。所有基本不会出现乱码情况。
&读取软件能够识别存储文件的字符集吗?
由于目前各种字符集加起来有上百种,目前除了unicode字符集,定义的存储文件头,基本其它字符集只是给出了对应的字符编号值。因此,相同编号会出现在不同的字符集中,光从文件存储的编码值,是不能确定它的字符集的。如:gb2312字符集中,D6d0对应是“中”,而同样是:D6D0在ecu-jp 字符集中,对应是“面”
什么是bom头?
bom全称是:byte order mark,汉语意思是标记字节顺序码。只是出现在:unicode字符集中,只有unicode字符集,存储时候,要求指定编码,如果不指定,windows还会用默认的:ANSI读取。常见的bom头是:UTF-8 U EF BB BF UTF-16LE U FF FE (小尾) UTF-16BE U FE FF (大尾) UTF-32LE U FF FE 00 00 UTF-32BE U 00 00 FE FF
unicode与utf-8 、utf-16 utf-32是什么关系?
unicode(统一码、万国码、单一码)是一种字符集,Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。在Unicode中:汉字“字”对应的数字是23383。我们可以用:UTF-8、UTF-16、UTF-32表示这个数字,将数字23383存储在计算机中。UTF-8对应是:0xE6, 0xB1, 0x89(3个字节),UTF-16对应是:0x6c49(2个字节),UTF-32对应是:0x6c49(4个字节)。utf-8,utf-16,utf-32是unicode码一种实现形式,都是属于unicode编码。
unicode编码特点是什么?unicode编码特点是,它定义了编码方式和存储实现方式。编码方式就是上面说的可以用,utf-8…utf-32表示,而存储实现方式,无论那种编码都知道了文件头(bom)。因此,可以通过这个特殊头来判断存储的文本文件使用那种字符集编码。 &为什么utf-8编码不指定bom头(可以理解为文件头),软件任然可以正常判断出它字符集编码?这个问题估计很多朋友都会产生疑问,为什么utf-16不指定就读乱码,而utf-8可以。我们可以从下面的例子看下: utf-8是怎么样从unicode转换而来了。& Unicode编码(16进制) U UTF-8 字节流(二进制) 000000 - 00007F U 0xxxxxxx 000080 - 0007FF U 110xxxxx 10xxxxxx 000800 - 00FFFF U 1110xxxx 10xxxxxx 10xxxxxx 010000 - 10FFFF U 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 从上面看,发现规律没有?第一个自己开头有几个”1”,后面就对应有几个10开头字节了。 这样我们都可以通过正则进行检测了.
&&&&&&& [\x09\x0A\x0D\x20-\x7E]&&&&&&&&&&&& # ASCII&&&&&&& |[\xC2-\xDF][\x80-\xBF]&&&&&&&&&&&&& # non-overlong 2-byte&&&&&&& |\xE0[\xA0-\xBF][\x80-\xBF]&&&&&&&& # excluding overlongs&&&&&&& |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}&& # straight 3-byte&&&&&&& |\xED[\x80-\x9F][\x80-\xBF]&&&&&&&& # excluding surrogates&&&&&&& |\xF0[\x90-\xBF][\x80-\xBF]{2}&&&&& # planes 1-3&&&&&&& |[\xF1-\xF3][\x80-\xBF]{3}&&&&&&&&&& # planes 4-15&&&&&&& |\xF4[\x80-\x8F][\x80-\xBF]{2}&&&&& # plane 16
由于它独特的编码存储特点,因此目前常见就能够自动分析出来。(windows记事本,editplus,notepad++等)
为什么bom头会产生乱码?
有bom头的存储或者字节流,它一定是unicode字符集编码。到底属于那一种(utf-8还是utf-16或是utf-32),通过头可以判断出来。由于已经说过utf-16,utf-32不指定bom头,解析程序默认就认为是ansi编码,出现乱码。 而utf-8指定或者不指定程序都可判断知道对于的字符集编码。问题就出在这里,可能有的应用程序(ie6浏览器),它就认为如果utf-8编码,就不需要指定bom头,它可以自己判断,相反指定了bom头,它还会出现问题(因为它把头当utf-8解析出现乱码了)。这里不截图了,cnblogs里面谈这个比较多,目前ie6会出现问题。其它ie7+,firefox,chrome不会出现,会忽略掉bom头。 统一解决办法是:存为utf-8编码是,不需要加入bom头,其它utf-16,utf-32加入。
通过程序运算gb2312编码能够自动转换为utf-8编码吗?
utf-8实际是unicode字符集表现方式。如果看了这2种字符集编码表就清楚了。 它是2个独立字符集,相同汉字在2个字符集中所对应编号没有关系,而且汉字顺序也不同,gb2312先按照拼音后按照笔画排序,而unicode没有做相应规定。我们清楚知道,如果没有对应字符集映射关系表在手。通过直接程序进行运算是实现不了的。如果你手里有这2个字符集映射表。如:”字”utf-8是:0xE6, 0xB1, 0x89 ,对应unicode编码是:23383,然后拿23383,在unicode字符集寻找,发现是字符“字”,接着将“字”这个字符,拿到gb2312表中查询:0xCE,0xC4 因此转换结果是:0xE6,0xB1,0x89 ---& 0xCE,0xC4。
&&GB2312、GBK、gb18030、Big5是什么关系?
GB年的GB2312一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
&GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。包括港、台两种汉字字库.&
GB产生,在GBK汉字标准字符集继续扩展,GB18030是GBK的超集,也就是包含的字符要比GBK多,又增加了6351个字符,其中一部分为4字节字(four-byte encoding range)。增加了六种少数民族语言和一些四字节字。
&Big5是中国台湾的,是繁体中文代表
GB18030兼容GBK兼容GB2312 ,相同常用汉字在GB2312编码表中字符编号(编码)与GBK,GB18030相同。如:”字“gb2312字符编码是:0xCE,0xC4 ,它在其它2个里面也是这个。因为GB2312只有7000多常用汉字,当出现繁体,古文时候就会出现问题,因此采用大集合的GB18030是个不错选择。
Big5与GB2312不能通过程序相互转换,需要有字符集映射关系表才能完成。
&& 字符集是怎么样一个演变过程呢?
这个如果讲故事可以讲很久了。当计算机有美国人发明后,当时设计到字符输入,由于是英文字符,通过收集整理。它们形成了标准的ascii码(128) 字符集。8位,首位为0。 由于不断普及,欧洲西方国家相应使用,发现有些特殊字符它们不能表示,如:λφ等。如是出来想法,想利用ascii码后128位,增加它们的字符。这样就出现了EASCII码。这些还是不能表示所有国家,想法语,俄语等有自己特殊字符。因此制定标准将后128位进行分片制定。制定出iso-8859系列字符集。
ISO/IEC 8859-1 (Latin-1) - 西欧语言ISO/IEC 8859-2 (Latin-2) - 中欧语言ISO/IEC 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。ISO/IEC 8859-4 (Latin-4) - 北欧语言ISO/IEC 8859-5 (Cyrillic) - 斯拉夫语言ISO/IEC 8859-6 (Arabic) - 阿拉伯语ISO/IEC 8859-7 (Greek) - 希腊语ISO/IEC 8859-8 (Hebrew) - 希伯来语(视觉顺序)ISO 8859-8-I - 希伯来语(逻辑顺序)ISO/IEC 8859-9(Latin-5 或 Turkish)- 它把Latin-1的冰岛语字母换走,加入土耳其语字母。ISO/IEC 8859-10(Latin-6 或 Nordic)- 北日耳曼语支,用来代替Latin-4。ISO/IEC 8859-11 (Thai) - 泰语,从泰国的 TIS620 标准字集演化而来。ISO/IEC 8859-13(Latin-7 或 Baltic Rim)- 波罗的语族ISO/IEC 8859-14(Latin-8 或 Celtic)- 凯尔特语族ISO/IEC 8859-15 (Latin-9) - 西欧语言,加入Latin-1欠缺的芬兰语字母和大写法语重音字母,以及欧元()符号。ISO/IEC 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。
这些在一段时间,可以解决西方国家常见字符。当后来电脑在中日韩等国家普及时候,象中国常见汉字有7000多个,扩展128个空位,完全不够。因此,需要用多个字节表示。后来就定,第一个字节,第一位如果是1,后面还有一个字节与之一起表示一个字符。如果是0,就对应ascii码。 这样就形成了国内的gb2312,后来还是不够表示繁体中文,加入了:gbk,最后是gb18030,但是,这样全世界各个国家还是用它们自己字符集进行表示。没有一个统一的大字符集,能够表示全球所有字符。直到unicode出现,它的设计最多可以表示100多万个字符。全球所有字符都可以收纳在其中。 写出的程序,不用经常进行各种编码转换。就可以让世界上所有国家可以阅读对应字符文字。
&& 什么是代码页,它与字符集有什么关系?
大家在指定网页程序语言生活,还记得cp936表示中文代码页(code page)。那么它与我们说的gbk字符集有什么关系呢?代码页是字符集编码的别名,也有人称"内码表"。早期,代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称。
常见字符集与代码页直接映射是:
cp&&&&& charset
932 ― 日文936 ― 简体中文(GBK)949 ― 韩文950 ― 繁体中文(大五码)1200 ― UCS-2LE Unicode 小端序1201 ― UCS-2BE Unicode 大端序65001 ― UTF-8 Unicode
936就是我们的gbk字符编码集。
&CJK字符集是什么?
cjk代号意思是:汉语(Chinese)、日语(Japanese)、韩语(Korean)。也就是包含这3国语言的字符集。包含这3个国家常见的汉字,一共有2万多个。
&所有软件都会默认是:ANSI字符集吗?
不同程序默认读取字符集不同,上面举例是记事本默认是这样的。在php里面会以:iso-8859-1读取。 jsp程序,java默认字符集也是:iso-8859-1。
&&为什么很多软件程序编译过程使用是:iso-8859-1字符集?
由于我们通过应用程序书写的软件是用各种字符集编码保存在磁盘中。如果中文默认是用gbk。保存于磁盘中,默认以字节码保存,是否有无中文,每个字码值在:1-256。这些刚好可以用iso-8859-1扩展单字节字符集。因为,它是存储最小单元。在程序语言里面,不会用中文作变量,函数等名称。那些对应都是常见ascii码。而中文用字注释,或者一些常量中。在编译时候不会影响到语法问题。它会以原来字节码保持原样。在读取时候,只需要用对应的字符集编码读出,就能得到对应中文字符。
07-0706-2106-1306-0704-1102-2312-1012-1011-2011-16
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载后使用快捷导航没有帐号?
查看: 24634|回复: 53
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
原本我玩得好好的 今天打开 一直就乱码
卸载重装 老是错误 重新下载了三次 后来火了把下载路径换成另外一个路径 终于下载好了
一安装全是乱码?怎么回事?超级火大
求解释 附上图
(0 Bytes, 下载次数: 2000)
21:47 上传
点击文件名下载附件
(0 Bytes, 下载次数: 1963)
21:47 上传
点击文件名下载附件
(0 Bytes, 下载次数: 1973)
21:48 上传
点击文件名下载附件
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
求官方解释&&
最后登录QQ注册时间阅读权限20精华0积分13955帖子
, 积分 13955, 距离下一级还需 1045 积分
好人难做么?难的是一辈子做好人,不做坏人。。。。
而我就那个好人,你就是那个坏淫
最后登录注册时间阅读权限100精华0积分41345帖子
QQ大斗士, 积分 41345, 距离下一级还需 18655 积分
。。。。这个这个
最后登录QQ注册时间阅读权限100精华0积分45377帖子
QQ大斗士, 积分 45377, 距离下一级还需 14623 积分
你系统语言的问题
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
技.术.宅 发表于
你系统语言的问题
怎么设置回来知道吗 老兄
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
而且玩游戏很卡 ……
最后登录注册时间阅读权限100精华20积分834095帖子
人生就像一场戏,因为有缘来相聚。 相扶到老不容易,是否更该去
这个宅宅已经回答你了!
最后登录QQ注册时间阅读权限100精华0积分45377帖子
QQ大斗士, 积分 45377, 距离下一级还需 14623 积分
你试试切换系统国家为中国
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
技.术.宅 发表于
你系统语言的问题
我的设置 是这样的没错啊&&
(0 Bytes, 下载次数: 1981)
21:57 上传
点击文件名下载附件
(0 Bytes, 下载次数: 1954)
21:57 上传
点击文件名下载附件
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
技.术.宅 发表于
你试试切换系统国家为中国
怎么切换 我设置地区 语言都是中国啊……
最后登录QQ注册时间阅读权限10精华0积分160帖子
QQ土人 , 积分 160, 距离下一级还需 440 积分
重新下来安装吧
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
独走悲伤 发表于
知道是怎么回事嘛?
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
文琪 发表于
。。。。这个这个
知道怎么回事嘛
最后登录QQ注册时间阅读权限100精华0积分45377帖子
QQ大斗士, 积分 45377, 距离下一级还需 14623 积分
你删除了什么字体的吧?
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
技.术.宅 发表于
你删除了什么字体的吧?
怎么可能 我什么文件都没动&&就是360 搞了一下 可能是360搞的鬼&&现在就连卸载都是乱码
(0 Bytes, 下载次数: 19)
22:10 上传
点击文件名下载附件
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
第四次&&重新下载ing&&
(0 Bytes, 下载次数: 11)
22:11 上传
点击文件名下载附件
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
<font color="#2057765 发表于
这个宅宅已经回答你了!
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
已经正常了 原来是语言设置的问题……
我去 !谢谢各位搭理的 好人
(0 Bytes, 下载次数: 49)
22:31 上传
点击文件名下载附件
最后登录QQ注册时间阅读权限10精华0积分85帖子
QQ野人, 积分 85, 距离下一级还需 65 积分
分享一下&&系统语言有三个内容 其他我都正常就是这个地方党史是美国 英文&&这里设置一下 重启 就OK了
算了这么晚 也没什么人了&&申请 精华帖!哦
(0 Bytes, 下载次数: 52)
22:33 上传
点击文件名下载附件
逆战发帖王勋章
发表主题帖超过100
辛勤灌水勋章
论坛积分达到2W5
在逆战版面发表20精华帖
发帖数达到10W
Powered bywin7字体变成乱码和方格,求具体解决的方法 IN7字体变成乱码和框框_微博生活网
你目前正在浏览:& > &
win7字体变成乱码和方格,求具体解决的方法
win7字体变成乱码和方格,求具体解决的方法
ie浏览器,进入后输入法,桌面的字体变得很小,输入法和浏览器就可以看字了,杀过毒了没毒,用其他的分辨率显示会变形,桌面的图标下面的字体就不会乱码方格,我的电脑的分辨率只能用默认推荐的,360杀毒等一系列的软件显示的也是乱码和谐方格,系统是win7旗舰镑64位正版的,欢迎界面和杀毒还是一样乱码,后来我去下了个方正仿宋的字体,用驱动精灵更新过显卡驱动了,不过那些字或大或小乱七八糟今天电脑开机的时候欢迎界面里面的欢迎使用变成乱码
,以前也出现类似的问题。控制面板—字体(点击字体选项如果出现错误提示,只要是中文字体都是乱码 竖条 等。,证明是系统文件可能损毁)解决我的是windows xp
一般如果显示乱码的话好像是没有某种字体。是不是微软雅黑字体啊,仅仅是个人建议。其实我也不懂应该还是字体的问题吧
win7字体变成乱码和方格的解决步骤:1、点开始按钮——控制面板;2、点击“时钟、语言和区域”;3、点击 “区域和语言”;4、点管理选项卡,点更改系统区域设置;5、选择英语(英国),点确定;重启电脑,这里需要提醒的是,重启后将全是乱码,因此需要牢记如何从桌面进入到这个界面的,可以用笔记录下来;6、重启后,进入区域和语言设置窗口,选择中文(简体,中国),点确定,然后重启电脑生效。
win7部分软件提示框出现乱码 其他字体也变得奇怪 ……
是因为这些软件的文字编码,和系统所用的文字编码发生了冲突,所以系统不能正确地显示。   开始 - 控...win7字体全部变成方块了,怎么办 ……
(比如说:宋体-XP默认字体 微软雅黑-Win7默认字体) 复制到字体目录下(C:\...2012-...win7电脑字体出现乱码,求解决 ……
1.打开控制面板&区域和语言,按照图一进行设置。 2.如果还不行,就打开图二进行设置安装 3.以上都...win7系统字体乱码怎么修复 ……
“非Unicode程序中所使用的当前语言”更改为“简体中文”即可,win7系统下载,...2012-...为什么我的电脑的字体变成这样了,我用的是WIN7系统,之前一直很好的。文字显示乱码或者问好或者方框 ……
下载一个“装机大师”(纯净的装机工具),然后制作成U盘装机大师U盘启动盘 。 百度搜索windows...Win7 64位 部分软件和文档字体显示乱码!求大神解决!! ……
与字体无关,怀疑你安装的操作系统不是原生的简体中文版,有可能是其它语言版本安装的简体中文语言包后“转...看了你这个问答:“求WIN7解决特殊符号变成框框的办法。”然后字体变的不圆滑,怎么在变回来? ……
变成框框,或者...
Win7显示不了特殊符号,会变成框框。求特殊符号字库包!...为什么用WIN7系统之后 有一些文件会出现乱码或者看不懂的文字~ ……
一、控制面板,搜索字体。还原默认字体设置。然后重启 二、控制面板,区域和语言。 将管理 非unico...电脑有些字体乱码是怎么回事?win7系统的。 ……
这是因为你电脑的默认字体被修改了,用360系统修复一下就好了 要是不会可以把你的qq私信给我我远程帮...
你可能感兴趣的内容?5024人阅读
&&&&&& 1. 在android中的播放器播放过程中,经常会出现歌曲列表,歌曲播放过程中相关信息出现乱码的情况。这里所说的乱码指的是在这些文件信息中经常会出现像“??。&&¥@”的这样的无效字符。造成这样的原因是:文件在记录信息的时候会使用一定的编码方式,像UTF-8,GBK,Big-5等等,这样的文件如果解析解码时使用的不是与之匹配的解码方式的,这样有些信息就是没有办法被解析解码到的,造成信息的遗漏解析,解码,更或者就是错的解析解码,这样,便出现了这里称之为乱码的错误信息。
&&&& 字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文,字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
&&& &字符编码(Character Encoding):是一套法则。是将我们自然的字符对应映射成计算机对应识别的数字对应,即就是把自然符号转换为计算机可以接受的数字系统的数,当然,这个数字是计算机的数字代码。
&&& 例如,在计算机中,使用一个字节的大小来表示固定的一个自然字符,假设,“m“这个字符对应的是 ,这两者之间是一一对应的关系,这样的话,“m”就完成了字符编码的过程,当然这只是一个假设的例子,不属于任何一种编码方案。
&&& 2. 有这样的一种说法:
&&& 编码:字符集编码和字符编码方案的一个组合 ,它可以将字符集中的字符,映射成字节序列。编码隐含着编码字符集和字符编码方案,从而也隐含着字符集。就是说是两层含义。在UTF-8这样的编码中,首先明确的是UTF-8中有自己可以表示的自然字符集,每种不同的编码方式所能表示的字符的多少范围是不一样的。第二层,这样丰富的自然字符都有规定序列的数字构成一一对应的关系,这些数字是以字节为单位存储表示的。&&&
&&& UTF-8是一种编码,它是Unicode编码字符集和UTF8编码方案的一个组合。GB2312也是一种编码,它的编码字符集就是编码的简体中文字符集,编码方案采用定长编码。
&&& 实践中经常混用编码字符集和编码这两个概念,这是因为大多数编码字符集都只有一种编码方案,这样的编码字符集(或者说编码)包括GB2312,GBK, ASCII, ISO8859-1等。
这里要注意的是,当编码字符集存在多种编码方案时,就有必要区分编码字符集和编码了,Unicode时一般是指编码字符集,说UTF-8UTF-16时才是指编码。
&& 3. 常见字符编码
&&& (1&)UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变。长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。UTF-8使用一至四个字节为每个字符编码:在处理经常会用到的ASCII字符方面非常有效。在处理扩展的拉丁字符集方面也不比UTF-16差。对于中文字符来说,比UTF-32要好。
&&( 2)Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。第一个字节称为&高位字节&,第二个字节称为&低位字节&。&高位字节&使用了0x81-0xFE,&低位字节&使用了0x40-0x7E,及0xA1-0xFE,Big5属中文内码,一般使用繁体中文(正体中文)。在Big5的分区中
&& (3)&Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统。Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式[1]对外发表。
& (4)等等还有其他的不在啰嗦。
4. java应用程序中对字符的解码:
&&& 在音乐播放器中歌词部分的文件编码有对四种常见的编码&#26684;式 &GBK&、 &UTF-8&、&Unicode&、&UTF-16BE&,每一种编码&#26684;式的区分在于写入文件头的信息不同。为了避免读取乱码的现象,在读取文本之前先读取文件头信息,以便做出正确的读取编码方式。
&&& public static String codeString(File file) throws Exception
&&&&&&&&&&BufferedInputStream bin = new BufferedInputStream(new FileInputStream(file));&
&&&&&&&&&&&int p = (bin.read() && 8) &#43; bin.read();
&&&&&&&&&&String code =
&&&&&&&& Log.e(&lyric&,&p=&&#43;p);
&&&&&&& switch (p)
&&&&&&&&{&
&&&&&&&& & case 0xefbb:
&&&&&&&&&&&code = &UTF-8&;& &&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&& &case 0xfffe:&
&&&&&&&&&&&& code = &Unicode&;&
&&&&&&&&&& &&&
&&&&&&&& & case 0xfeff:&
&&&&&&&&& code = &UTF-16BE&;& &&&&&&&&&&&&
&&&&&&&&&&&&
&default:&
&&&&&&&&&&&& code = &GBK&;
然后,以字符流的方式读取文本
&InputStream in = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(in, codeString(file)));
StringBuilder sb = new StringBuilder();
String temp =
while ((temp = br.readLine()) != null) {
sb.append(temp).append(&\n&);
5. 出现字符乱码的时候进行字符转换:java层的转换
&&& public class ChangeCharset {
&&& /** 8 位 UTF转换&#26684;式&&&& */
public static final String UTF_8 = &UTF-8&;
&&/** 中文超大字符集&&&& **/
public static final String GBK = &GBK&;
/** 16 位 UTF转换&#26684;式,Big Endian(最低地址存放高位字节)字节顺序&&&& */
public static final String UTF_16BE = &UTF-16BE&;
/** 将字符编码转换成UTF-8&&&& */
public String toUTF_8(String str) throws&UnsupportedEncodingException {return this.changeCharset(str, UTF_8);}
/** 将字符编码转换成UTF-16BE&&&& */
&public String toUTF_16BE(String str) throws&UnsupportedEncodingException{return this.changeCharset(str, UTF_16BE);
&&* 字符串编码转换的实现方法
&&&& * @param str&&& 待转换的字符串
* @param newCharset&&& 目标编码
public String changeCharset(String str, String newCharset)&throws UnsupportedEncodingException {
if(str != null) {
//用默认字符编码解码字符串。与系统相关,中文默认为GBK
&&& byte[] bs = str.getBytes();
return new String(bs, newCharset);&&& //用新的字符编码生成字符串
&* 字符串编码转换的实现方法
&&&& * @param str&&& 待转换的字符串
&&&& * @param oldCharset&&& 源字符集
&&&& * @param newCharset&&& 目标字符集
&public String changeCharset(String str, String oldCharset, String newCharset)
throws UnsupportedEncodingException {
&if(str != null) {
&&&&&&&&&&& //用源字符编码解码字符串
byte[] bs = str.getBytes(oldCharset);
return new String(bs, newCharset);
public static void main(String[] args)throws UnsupportedEncodingException {
ChangeCharset test = new ChangeCharset();
String str = &This is a 中文的 String!&;
System.out.println(&str:& &#43; str);
&String utf8 = test.toUTF_8(str);
System.out.println(&转换成UTF-8码:& &#43; utf8);
String utf16be = test.toUTF_16BE(str);
System.out.println(&转换成UTF-16BE码:& &#43; utf16be);
gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
System.out.println(&再把UTF-16BE编码的字符转换成GBK码:& &#43; gbk);
输出结果:
&&&&&&&&&&&&& str:This is a 中文的 String!
&&&&&&&&&&& 转换成UTF-8码:This is a ????? String!
&&&&&&&&&&& 转换成UTF-16BE码:周楳?猠愠????瑲楮朡
&&&&&&&&&&& 再把UTF-16BE编码的字符转换成GBK码:This is a 中文的 String!
原理分析:
1、调用String的getByte方法对字符串进行解码,得到字符串的字节数组。
2、根据字节数组和新的字符编码构造一个新的String对象,得到的就是按照新的字符编码生成的字符串.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:407922次
积分:4237
积分:4237
排名:第6282名
原创:37篇
转载:135篇
评论:32条
(1)(1)(2)(1)(4)(5)(1)(1)(2)(7)(14)(3)(10)(11)(5)(13)(13)(10)(16)(11)(17)(5)(10)(10)(1)}

我要回帖

更多关于 请问怎么做双眼皮好像 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信