Java编程中的编码问题、Java中的中文编码问题

作者:小菜 更新时间:2025-02-27 点击数:
简介:前往java软件专题 1.只有字符到字节或者字节到字符的转换才存在编码转码;2.Java String 采用 UTF-16 编码方式存储所有字符。

unicod

【菜科解读】

前往java软件专题

1.只有字符到字节或者字节到字符的转换才存在编码转码;

2.Java String 采用 UTF-16 编码方式存储所有字符。

unicode体系采用唯一的码点表示唯一的字符信息, 码点的存储方式有UFT-16、UTF-8 等等。

: AStringrepresents a string in the UTF-16 format in whichsupplementary charactersare represented bysurrogate pairs(see the sectionUnicode Character Representationsin theCharacterclass for more information). Index values refer tocharcode units, so a supplementary character uses two positions in aString.TheStringclass provides methods for dealing with Unicode code points (i.e., characters), in addition to those for dealing with Unicode code units (i.e.,charvalues).

3. String只有一种格式,可认为String是独立于编码系统的,通过 getBytes(StringcharsetName) 可实现编码转换。

4. String对象是内存数据,string之间不存在编码变换问题。

5.编码转换场景主要在 I/O , I/O 包括磁盘 I/O 和网络 I/O:文件输入输出、屏幕、数据库、浏览器、服务器。

6. 在内存中倒腾String数据是编码无关的,比如压缩编码。

7. 编码误区:new String(str.getBytes("ISO-8859-1"), "GB18030") 这种用法是无意义的,甚至是错误的。

这种用法是用GB18030编码将ISO-8859-1编码格式的字节数据强制转换成unicode码点,不乱码是运气!

9.数据库JDBC能够处理 数据库数据 String 的正确互换。

9.OutputStreamWriter 和InputStreamWriter 应该指定编码格式,避免程序依赖操作系统默认编码。

10.用户从浏览器端发起一个 HTTP 请求,需要存在编码的地方是 URL、Cookie、Parameter。

服务器端接受到 HTTP 请求后要解析 HTTP 协议,其中 URI、Cookie 和 POST 表单参数需要解码,服务器端可能还需要读取数据库中的数据,本地或网络中其它地方的文本文件,这些数据都可能存在编码问题,当 Servlet 处理完所有请求的数据后,需要将这些数据再编码通过 Socket 发送到用户请求的浏览器里,再经过浏览器解码成为文本。

11. tomcat:URL 的 URI 部分进行解码的字符集是在 connector 的

12.QueryString(GET 查询参数) 的解码字符集要么是 Header 中 ContentType 中定义的 Charset 要么就是默认的 ISO-8859-1,要使用 ContentType 中定义的编码就要设置 connector 的 中的 useBodyEncodingForURI 设置为 true。

13.不要在 Header 中传递非 ASCII 字符,如果一定要传递的话,我们可以先将这些字符用 org.apache.catalina.util.URLEncoder 编码然后再添加到 Header 中,这样在浏览器到服务器的传递过程中就不会丢失信息了,如果我们要访问这些项时再按照相应的字符集解码就好了。

14.POST 表单的编解码:通过 HTTP 的 BODY 传递到服务端的。

当我们在页面上点击 submit 按钮时浏览器首先将根据 ContentType 的 Charset 编码格式对表单填的参数进行编码然后提交到服务器端,在服务器端同样也是用 ContentType 中字符集进行解码。

所以通过 POST 表单提交的参数一般不会出现问题,而且这个字符集编码是我们自己设置的,可以通过 request.setCharacterEncoding(charset) 来设置。

15.HTTP BODY 的编解码:当用户请求的资源已经成功获取后,这些内容将通过 Response 返回给客户端浏览器,这个过程先要经过编码再到浏览器进行解码。

这个过程的编解码字符集可以通过 response.setCharacterEncoding 来设置,它将会覆盖 request.getCharacterEncoding 的值,并且通过 Header 的 Content-Type 返回客户端,浏览器接受到返回的 socket 流时将通过 Content-Type 的 charset 来解码,如果返回的 HTTP Header 中 Content-Type 没有设置 charset,那么浏览器将根据 Html 的 中的 charset 来解码。

如果也没有定义的话,那么浏览器将使用默认的编码来解码。

%@ page contentType="text/html; charset= GBK" %>。

该设置和response.setCharacterEncoding("GBK")等效。

示例代码

/** * @author zhenjing * @date 2013-9-7public class cnCodeTest { public static void toHex(char[] b) { for (int i = 0; i 几种常见的编码格式

为什么要编码

不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。

由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。

我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。

这个翻译的过程就是编码。

所以可以想象只要不是说英语的国家要能够使用计算机就必须要经过编码。

这看起来有些霸道,但是这就是现状,这也和我们国家现在在大力推广汉语一样,希望其它国家都会说汉语,以后其它的语言都翻译成汉语,我们可以把计算机中存储信息的最小单位改成汉字,这样我们就不存在编码问题了。

所以总的来说,编码的原因可以总结为:

计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个

人类要表示的符号太多,无法用一个字节来完全表示

要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码

如何“翻译”

明白了各种语言需要交流,经过翻译是必要的,那又如何来翻译呢?计算中提拱了多种翻译方式,常见的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。

它们都可以被看作为字典,它们规定了转化的规则,按照这个规则就可以让计算机正确的表示我们的字符。

目前的编码格式很多,例如 GB2312、GBK、UTF-8、UTF-16 这几种格式都可以表示一个汉字,那我们到底选择哪种编码格式来存储汉字呢?这就要考虑到其它因素了,是存储空间重要还是编码的效率重要。

根据这些因素来正确选择编码格式,下面简要介绍一下这几种编码格式。

ASCII 码

学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。

ISO-8859-1

128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。

ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。

GB2312

它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。

GBK

全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。

GB18030

全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。

UTF-16

说到 UTF 必须要提到 Unicode(Universal Code 统一码),ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。

可想而知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应文档。

Unicode 是 Java 和 XML 的基础,下面详细介绍 Unicode 在计算机中的存储形式。

UTF-16 具体定义了 Unicode 字符在计算机中存取方法。

UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。

UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。

UTF-8

UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。

而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。

不同类型的字符可以是由 1~6 个字节组成。

UTF-8 有以下编码规则:

如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。

可见,所有 ASCII 编码已经是 UTF-8 了。

如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。

如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

Java,编程,中的,编码,问题,、,中文,前往,java,

修行人拜佛为什么总要供奉西方三圣?西方三圣在佛教中的地位如何样

念佛人应该在家里供奉的卷轴挂像,大家在供奉圣像后应当观想:三圣就在我面前,他们在我的佛堂里、在我的心里都占有很大的位置。

从此,供养西方三圣,都不离开,临终不离开,往生后更是不离开,他们成为我们直至成佛之间永远不离的重要皈依境,也是自己归心、归命、归投的境。

希求一心与阿弥陀佛、两大菩萨相应,对于修净土法来说非常重要,此生、临终包括往生后的一切利乐,都要依靠以阿弥陀佛为主的西方三圣的力量来成办。

经教中说,阿弥陀佛是法界身,遍在一切处。

尤其以对圣像开光为缘起,阿弥陀佛就已经在当处,已经降临在自己家中了;不但佛尊降临,观音、势至也同时降临。

佛是无量光,他就在我们身边,观世音菩萨的大悲力、大势至菩萨的大威神力同样遍入苦海来拔济念佛众生往生。

三位圣尊住临佛堂,我们就要在心中时时不离、专一依止,以诚敬之心每天在像前顶礼、供养、祈求、发愿等等。

与我们最有缘的西方三圣作为无上福田,已经超越了生灭心的境界,没有任何时空的局限。

我们至心向佛礼拜一次,都会产生无量福德,如经中所说,从脚跟一直到金刚际之间有多少微尘,就有那么多转轮王位的大福德。

如果自己具有更大的信心、恭敬、胜解等等,功德也就更加不可思议。

再者,在如是福田面前,时时都可以供养各种净水、明灯、妙香、鲜花、饮食、资具等等,向对境相应做供养的缘故,将会出现相应的福德。

比如,供鲜花、新净的衣服等,将来会得到相好;供养灯光会增长智慧;供养食物会增长力量等等。

如今,作为无上福田的西方三圣已经出现在我们面前,就如同农民拥有了一块肥沃土地,播一粒种便能收获万斤粮,他一定非常欢喜,同样,我们每天能在殊胜的对境前呈供,就能积聚无边资粮,还可以鞭策自己不去轻举妄动。

再者,佛的形相大非常重要,按一般人的心量来说,佛像小,自己的发心似乎也小;佛像大,发心也会大一些。

大幅的佛像印在自己心田中,就能时时记得这是最关键的本师阿弥陀佛、最关键的观音与势至两大菩萨。

如此一来,吃饭时在想三圣,走路时在想三圣,睡觉时也在想三圣,时时不忘记,就成为很好的助缘,到临终时,自然而然可以浮现在心前。

经过长期的忆念、串习,自己与佛也就越来越亲、越来越近、越来越熟悉。

当自己越有诚心,就会感觉佛像越灵验,他在照顾我们,使我们得到加被。

我们有什么事,都可以向阿弥陀佛或西方三圣请示,有什么困难、有什么愿望也可以向阿弥陀佛请示。

虽然目前还见不到佛的色身,但佛像代表佛,现在关键就要在佛像前建立这种很亲近的关系。

关系建立起来,会很容易得到直接的感应和帮助,会感觉阿弥陀佛为主的三圣时时都在护佑自己等等,有很重要的作用。

再者,如果有心想学《净土十要》等的大著作来深入净土法门,信愿也将会深深地扎根、生长,从远程观点来看,往后会发生极大的作用。

深入教理能使我们加深对阿弥陀佛和西方法门的信心、愿力,发起纯一的心、相续的心、坚固的心、勇猛的心、诚敬的心、喜乐的心、殷重的心等等,这无量无数的善心都要从牢不可破的胜解、信心中产生。

蕅益大师把信愿判为慧行,说它如目一般,来自见解和智慧,并且成为往生的关键环节。

透过深入地学习诸佛菩萨、祖师们的大教海、大著作、光明语言,很容易逐步引发诚敬、欢喜,开发出非常光明的前途和缘起。

对此善加把握,我们心中的净土信愿就会从过去的漂浮而逐渐深入,并扎根于深层。

由于信心变得纯粹、变得深刻,跟阿弥陀佛的相应度也就完全不同,求生西方的愿也会与日俱增,不断地在心中形成。

信愿一旦到量,西方的门就为我们敞开,我们和阿弥陀佛永远都不再脱离。

我们正是依靠阿弥陀佛来解脱和成佛,最后的关键也在于自心和佛心的相应。

所以,这是具有非常深远意义的事。

随机文章高欢是在哪一年灭掉北魏建立北齐政权的?他是怎么做到的?大天使米迦勒是谁,最早与撒旦对抗的英雄(性别恐不男不女)养蜘蛛会认主人吗,蜘蛛生性凶残是不会认主人的盘点墓地风水禁忌事项,风水宝地不葬无福之人(坏人葬下去得恶果)揭秘史前最大的动物第一名,新西兰大鱼龙体长38米(重331.5吨)

诸子百家中的杂家是做什么的?杂家就是道家吗

杂家,中国战国末至汉初的哲学学派。

以博采各家之说见长。

以“兼儒墨,合名法”为特点,“于百家之道无不贯通”。

《汉书·艺文志》将其列为“九流”之一。

杂家的出现是统一的封建国家建立过程中思想文化融合的结果。

杂家著作以战国《尸子》、秦代《春秋》、西汉《淮》为代表,分别为战国时期门客尸佼秦相和汉淮南王刘安招集门客所集,对兼收并蓄,但略显庞杂。

又因杂家著作皆以思想为主,故有人认为杂家实为新道家学派。

“杂家”并不是一门有意识、有传承的学派,所以他也并不自命为“杂家”的流派。

在《杂家类叙》中则认为「杂之广义,无所不包」。

胡适先生在其《中国中古思想史长编》中指出:“杂家是道家的前身,道家是杂家的新名。

汉以前的道家可叫做杂家,秦以后的杂家应叫做道家。

研究先秦汉之间的思想史的人,不可不认清这一件重要事实。

” 杂家的代表人物,一是淮南王刘安(《 淮南子 》),另一是编撰《 》的 吕不韦。

杂家在历史上并未如何显赫,虽然号称“兼儒墨 、合名法”,“于百家之道无不贯综”,实际上流传下来的思想不多,在思想史上也没有多少痕迹。

现代科学越来越细化,“杂家”这称号,现在基本上说的就是此人没有专业本事,什么都知道一点,但什么都不精通的意思。

杂家代表人物 1、尸佼 尸佼之学在古代颇受重视,被列为诸子百家之一。

说“《尸子》,”,这是有道理的,得到历代学者的承认。

说明尸佼其学具有先秦战国时期三晋思想的基本内容和特征,他的《尸子》一书,含有他对在秦国社会改革总结的因素,实质上是对思想的总结,集中体现了三晋思想的精神。

兼融诸家之学,是尸佼思想的特点。

《汉书》将《尸子》列入杂家,《》改列为儒家,又称《尸子》为杂家,历史上这种不同的评论,说明尸子之学有综合各家所长,而这正是道家的优点与特色。

孙星衍说:“尸子以为贵公与诸子并论,不亦失言乎。

”其实尸子并无失言,他将孔子之学视为二家之言,是符合历史实际的。

说杂家就是“兼儒墨,合名法,知国体之有此,见王治之无不贯,此其所长也。

”其实,班固这里所说的是一般意义的杂家,尸佼的思想别是以三晋思想为基础的“杂”,他的杂家性质具有自己的特点。

2、吕不韦 先秦风气,名士所养门客人数越众越说明名士声誉高。

比如楚有 春申君 ,赵有 ,齐有 ,魏有 ,都是求贤若渴的政治名人,在列国间享有极高声望。

吕不韦认为,自己身为强秦相国,比上述诸人自愧不如,因此也招贤纳士,对前来跟随的门客礼遇有加,给予厚待,欲与上述名士的门客相竞。

当时各国名士又常以所养宾客能为荣,所以吕不韦也命门客编纂其所知见闻,一部辉煌的集体创作横空出世,后以他的名义发表,这就是《吕氏春秋》。

这是吕不韦执政期间所做的一件大事。

在先秦诸子著作中,《吕氏春秋》被列为杂家,其实,这个“杂”不是杂乱无章,而是兼收并蓄,博采众家之长,用自己的主导思想将其贯穿。

这部书以黄老思想为中心,“兼儒墨,合名法”,提倡在君主集权下实行,顺其自然,无为而无不为。

用这一思想治理国家对于缓和社会矛盾,使百姓获得休养生息,恢复经济发展非常有利。

3、刘安 刘安为后人留下一份宝贵的精神财富——被近代学者梁启超称誉为“汉人著述中第一流”的巨著《淮南子》。

《淮南子》又被称为《淮南鸿烈》或《鸿烈》,是刘安在做淮南王时,“招致宾客方士数千人”撰写而成的。

《淮南子》吸取了《》、《庄子》,特别是《黄老帛书》的思想资料,成为集黄老学说之大成的理论著作,它不仅对道、天人、形神等问题提出了独特见解,同时又在继承春秋时的“气”说与战国中期稷下的“精气”说的基础上,提出了“元气论”的概念和系统的宇宙生成论。

《淮南子》蕴含丰富的史学研究价值和精神智慧。

随机文章乾隆出巡路边吃瓜!对瓜农称讚不已 回宫路上竟令:杀了他世界上最巨大最清晰ufo曝光,头顶几百米高空飞过发怪声新疆不明飞行物现5000米高空,60%可能是航天发射所致阿什法则的重要性,无视它恐让微软和华为破产(绝非危言耸听)揭秘史前利莫里亚文明之谜,不重物质修炼精神成神(乌托邦文明)

加入收藏
               

Java编程中的编码问题、Java中的中文编码问题

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录