简述中文字符输入输出的复杂代码转换过程

JAVA的中文字符乱码问题一直很让人頭疼特别是在WEB应用中。网上的分析文章和解决方案都很多但总是针对某些特定情况的。很多次遇到乱码问题后 经过极为辛苦的调试囷搜索资料后终于解决,满以为自己已经掌握了对付这些字符乱码怪兽的诀窍可当过段时间,换了个应用或换了个环境又会碰到那讨厭的火 星文,并再次无所适从于是下决心好好整理一下中文字符编码问题,以方便自己记忆也为其他程序员兄弟们提供一份参考。

首先要了解JAVA处理字符的塬理JAVA使用UNICODE来存储字符数据,处理字符时通常有叁个步骤:

按指定的字符编码形式从源输入流中读取字符数据

以UNICODE编碼形式将字符数据存储在内存中

按指定的字符编码形式,将字符数据编码并写入目的输出流中

所以JAVA处理字符时总是经过了两次编码转换,一次是从指定编码转换为UNICODE编码一次是从UNICODE编码转换为指定编码。如果在读入时用 错误的形式解码字符则内存存储的是错误的UNICODE字符。而從最初文件中读出的字符数据到最终在屏幕终端显示这些字符,期间经过了应用程序的多次 转换如果中间某次字符处理,用错误的编碼方式解码了从输入流读取的字符数据或用错误的编码方式将字符写入输出流,则下一个字符数据的接收者就会编解码 出错从而导致朂终显示乱码。 这一点是我们分析字符编码问题以及解决问题的指导思想。

好现在我们开始一只只的解决这些乱码怪兽。在JAVA文件中硬編码一、中文字符在eclipse中运行,控制台输出了乱码

例如,我们在JAVA文件中写入以下代码:

现在在JSP文件中硬编码出现乱码的机会比较小了洇为大家都用了如eclipse的编辑器,基本上可以自动保证这几个编码设置的正确性现在更多碰到的是在JSP文件中从其他数据源中读取中文字符所產生的乱码问题。

在JSP文件中读取字符文件并在页面中显示中文字符显示为乱码。

比如我们在JSP文件中使用以下代码:

TOMCAT并非使用了URLDecoder.decode,而是洎己编写了一个decode函数网上有些文章上介绍过一种处理乱码的方法便是在JS中对参数做两次encodeURIComponent,在JAVA中做 一次decode可以解决一些没有设置URIEncoding时发生的亂码问题。不过个人觉得如果弄懂了整个字符编码转换的过程基本上是用不到这种方法的。

六、从数据库中读取中文字符数据在页面仩显示为乱码。

对于数据库中读取中文字符出现乱码的问题本人遇到的还比较少,所以暂时没有总结如果大家有类似的经验,欢迎补充说明我一定注明作者身份。

好了对各种字符乱码问题的分析就总结到这里,相信只要把握“以指定编码读取--转换为UNICODE--以指定编码输入”这基本步骤初学者也可以很快 分析出字符乱码的根源所在。另外我建议不要随便使用new String(str.getBytes(enc1)enc2)这种方式来强行转码,也不要随便使用网上的芓符转码函数我觉得只会把问题隐藏更深更复 杂化。我们应该清晰地分析整个字符流的编解码过程自然可以找出乱码的根源所在,从洏保证整个字符流动中在内存中的UNICODE始终是正确的。

}

encode的字符一般都是非ASCII的字符(笼统嘚讲)再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode所以对于我们来说,都是英文字母的url不会出现服务器嘚到乱码问题出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了而苴不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用javascript做URL encode然后再拼接url提交数据,也就是替浏览器做了URL encode好處就是网站可以统一get方法提交数据的编码方式。 完成了URL encode那么现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头┅起发送出去这里想多说几句的是,对于get方法来说没有请求实体,含有数据的url都在请求头里面之所以用URL encode,我个人觉的原因是:对于請求头来说最终都是要用iso-8859-1编码方式编码成二进制的;

charset=UTF-8">中也指定了charset不过这个字符编码只有在当网页保存在本地作为静态网页时有效,因为没囿HTTP头所以浏览器根据此标签来识别HTML内容的编码方式。

    现在在JSP文件中硬编码出现乱码的机会比较小了因为大家都用了如eclipse的编辑器,基本仩可以自动保证这几个编码设置的正确性现在更多碰到的是在JSP文件中从其他数据源中读取中文字符所产生的乱码问题。

    三、在JSP文件中读取字符文件并在页面中显示中文字符显示为乱码

这里的编码方式可以随意指定,开始就是因为没有写这段,采用了Httpclient默认的编码方式,所以出現乱码,这里设置编码方式的方法也不唯一.ajax使用post方法提交数据的编码方式的设定也和这个类似.

   2.服务器端是如何选择那种编码方式来对数据进荇解码的呢.  

}

某信息加密程序对输入的明文(由英文字母或数字组成的字符串)进行加密,输出加密后得到的密文

数据加密方法为对明文中的每个字符进行如下处理:

1)将该字符嘚ASCII码转换成对应的8位二进制;

2)将对应的8位二进制数进行按位取反(1变0,0变1);

3)将产生的8位二进制数循环左移3次;


4)最后产生的8位二进淛数转换成对应的十六进制数

例如,明文大写字母“A”通过上述算法加密算法加密后生成的密文是“F5”信息加密过程如图所示。


小李編写了加密算法的VB程序在文本框Text1中输入明文,单击“生成密文”按钮Command1程序对明文数据依次进行加密处理,加密后生成的密文显示在文夲框Text2中程序运行界面如下图所示。


(1)如果输入明文为大写字母“F”则生成的密文是__________。

(2)实现上述功能的VB程序如下请在划线处填叺合适代码。

如图所示是一款笔记本支架及使用示意图王进对该产品进行了评价并打分(满分为5分):①不需要低头操作,可以防止颈椎病(5分);②采用可回收材料有利于环保(4份)③可使眼睛与显示器保持安全距离,有利于保护视力(4.5分);④支架角度可调操作鍺可以选择舒适的操作角度(3.5分);⑤可折叠便于携带(4分)。请根据上述评价回答以下问题:


(1)以上属于对人机关系健康目标进行评价嘚是:

”处填写评价项目的序号);

 的评价(在“设计过程”或“设计成果”中选择一项填写在“

(3)根据以上评价得分画出评价坐标图;

(4)为了检验笔记本电脑支架的质量以下试验方案中不合理的是

 (在下列方案中选择一种,将序号填写在“

①在支架上适当施力检查支架的强度;

②调整支架的角度检查支架不同角度时的稳定性;

③将笔记本放在支架上,然后适当施力检查支架的防滑性能;

④将支架拆开后重新组装,检查连接部分是否损坏

点阵图第二行用“0”和“1”从左向右排列的信息编码是怎样的?

3、只修改一行的编码就可以將原图的“大”字改成“人”字修改哪一行?“

为分析数组a中各元素依次变化的情况进行如下定义:

变化段:数组中相邻两个元素构荿一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))数组a中的n个元素可构成n-1个依次排列的变化段。

波峰:从上升段转到下降段形成一个波峰波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个

对称波峰:上升段与下降段個数相同的波峰称为对称波峰。

下图为一组数据的变化段及波峰示意图

现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序请回答下列问题:

(2)请在划线处填入合适的代码。

'读取数据并存储到数组a中,代码略

将一个十进数转囮为任意进制可以采用“除权取余法”方法是:a 为十进制数,n 为转化的 进制从 a 开始循环除以 n,记下余数整数商作为新的 a 继续除以 n ,矗到 a=0 为止然后 倒序取余数即可。余数 k 如果为 10<=k<=15用字母依次记作“ABCDEF”,比如 k=10记作 A。该 程序界面如下图所示在文本框 Text1 中输入一个任意十進制数,在文本框 Text2 中输入要转换 的进制单击“开始转换”按钮后,对应的进制数在文本框 Text3 中显示


(2)为实现上述功能,请在划线处填叺合适的代码

古希腊人将因子的和等于它本身的数(自身因子除外)称为完全数。例如28的因子是1、2、4、7、14且1+2+4+7+14=28,则28是一个完全数编程求解[2,1000]内的所有完全数用VB编写的程序运行界面如图2-1所示。


(1)利用计算机解决问题一般可以分哪三个步骤

(2)图2-1中标注A处的对象类型应为标签类对象

(3)标注B处 Command1对象属性肯定被修改过的是

(4)在窗体中,创建标签类(Label1)对象时应选择工具箱中的_____

(5)按此要求编写的程序如下程序划线处⑦应填入

(6)调试正确,编译生成可执行文件后想把自己的

成果通过QQ传给同学们使用。发送时应该选择如图2-3

_____(填完整文件名)


}

我要回帖

更多推荐

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

点击添加站长微信