文档章节

再谈谈对Java C#中Unicode、编码和编码转换的理解

梁金堂
 梁金堂
发布于 2016/10/17 17:51
字数 458
阅读 44
收藏 0

写这短文之前想问大家一个问题,String 类型是什么编码?那char呢?

其实,记住一句话就行了,String 和char 都是unicode编码!!!底层的虚拟机和框架只能直接操作unicode编码。String= char[]常量+方法。所以,char的编码就是String的编码。开始学java的时候,第一节课,就告诉我们 java的字符编码是unicode编码。所以我们初始化char变量的时候,只能将unicode编码赋值给char.

例如 char c=’编';char c=(char)0x7f16 。还好,大部分编码前128个字符都是一样的,也就是ASCII的前128个字符。char c=(char)65;

下面说说字符编码转换

字符编码转换的基本原理是这样的,先将原始编码转unicode编码,再转成目标编码。

比如一个utf-8编码的字节数组 byte[] bytes,先是String s=new String(bytes,“utf-8”);//用utf-8编码的字节数组初始化一个unicode编码的字符串。byte[]  newBytes=s.getBytes("gb2312");//得到gb2312编码的字节数组。如果本身就是一个字符串了,就直接getBytes成目标编码就行了。如果是从网络上得到数据byte[],一定要在new String设置编码类型。如果得到的目标编码不对,那一定是字符串初始化不对。
 

如果有人说,怎么将utf-8的字符串(String)转成gb2312的字符串,你直接上去给他几巴掌,String本身就是unicode编码,哪里来utf-8的字符串。好了,utf-8 gb2312都是对于字节数组来说的。

C#的也是一样的原理。

© 著作权归作者所有

梁金堂
粉丝 9
博文 15
码字总数 17275
作品 0
玉林
私信 提问
java unicode转GBK

我们经常会遇到编码问题。Java号称国际化的语言,是因为它的class文件采用UTF-8,而JVM运行时使用UTF-16(至于为什么JVM中要采用UTF-16,我没看过 相关的资料,但我猜可能是因为JAVA里面一个...

圣洁之子
2015/03/02
0
0
java编码问题

关于java编码问题,我是这样理解的,对吗? .class文件的编码一定是UNICODE,jvm以UNICODE编码读入.class文件,在jvm所占用的内存中,数据的编码也一定是UNICODE的,这些都与虚拟机参数file....

pinitianjie
2018/05/09
133
1
java双字节编码和项目编码格式的理解

在Java中字符仅以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一方法)。由于java采用unicode编码,char 在java中占2个字节。2个字节(...

踏破铁鞋无觅处
2018/08/29
0
0
[转] Java 平台中的增补字符

作者:Sun Microsystems, Inc. 的 Norbert Lindenberg 和 Masayoshi Okutsu 摘要 本文介绍 Java 平台支持增补字符的方式。增补字符是 Unicode 标准中代码点超出 U+FFFF 的字符,因此它们无法...

红薯
2010/10/27
594
1
Java中的字符集编码入门(五)

如果你是JVM的设计者,让你来决定JVM中所有字符的表示形式,你会不会允许使用各种编码方式的字符并存? 我想你的答案是不会,如果在内存中的Java字符可以以GB2312,UTF-16,BIG5等各种编码形...

Java开发者
2010/05/05
122
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
5
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
5
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
15
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部