首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAVA学习册|字符编码|GBK(一)

大家对这两个的字符编码集的认识应该是从乱码问题开始的吧,如Idea默认是utf-8的,某一天,用他打开了某个GBK老项目,那就GG了,今天我们就先来聊一聊GBK 一回生 每当遇到乱码问题,第一反应就是...如学习java,我们就一直在脑子里面想着要学习java,通过编码,我们可以大声的说出来,如我们中国人会说:我要学习java , 英美会说:I want to learn java 等等。...从GBK源码,我们也可以看到,在encode, decode之前会初始化一个映射关系。 ? 然后我们源着代码往下看,可以看到两个大的对象,如下图所示: ? ?...今天先和大家聊到这里,明天我们来一起深入到DoubleByte,看看对具体对某一个字符是怎么编码的 下现补充两个知识点: 知识点一,十六进制 这个应该不算很难的知识点,十进制是0~9 , 二进制是0...知识点二,String的存储方式 这一点在以前的文章写过,以前String内部会有一个char[]数组,char是用两个字节来表示一个字符,后来String内部改成了byte[]来存这些字符。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

UNICODE,GBK,UTF-8

UNICODE,GBK,UTF-8 UNICODE,GBK,UTF-8     简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的...从ASCII、GB2312到GBK,这些编码方法是向下兼容的,即同一个字符在这些方案总是有相同的编码,后面的标准支持更多的字符。在这些编码,英文和中文可以统一地处理。...例如:UCS的0x3400在GB18030的编码应该是8139EF30,UCS的0x3401在GB18030的编码应该是8139EF31。...而FFFE在UCS是不存在的字符,所以不应该出现在实际传输。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。...有的HTML文件作者,特别是英文作者,认为世界上所有人都使用英文,在文件不指定charset。如果他使用了0x80-0xff之间的字符,中文Windows又按照缺省的GBK去解释,就会出现乱码。

2.6K20

再谈java乱码:GBK和UTF-8互转尾部乱码问题分析

一直以为,java任意unicode字符串,可以使用任意字符集转为byte[]再转回来,只要不抛出异常就不会丢失数据,事实证明这是错的。...用ISO-8859-1转UTF-8数据 设想一个场景: 用户A,有一个UTF-8编码的字节流,通过一个接口传递给用户B; 用户B并不知道是什么字符集,他用ISO-8859-1来接收,保存; 在一定的处理流程处理后...ISO-8859-1测试结果: unicode字符串:用户名 9 转成GBK会乱码:用户名 数据没有丢失:用户名 GBK 测试结果: unicode字符串:用户名 9 转成GBK会乱码:鐢ㄦ..., "GBK"), 对utf-8的字节流使用gbk解码,这是不合规矩的。...unicode是安全的,因为他是java使用的标准类型,跨平台无差异。

3.2K10

编码GBK的不可映射字符

引言 最近下载一些java项目源码看,发现如果用IDEA打开eclipse项目会报错: 错误: 编码GBK的不可映射字符 ?...解决方法 第一步:对于Error: 编码GBK的不可映射字符的解决 更改IDEA编码方式 更改代码文件本身编码方法 第二步:对于Error: java: 非法字符: ‘\ufeff’** 进行 GBK...找到项目所在文件夹,将里面的代码文件(后缀为.java的)一个一个用记事本打开,点击另存为,选择编码格式为 UTF-8 ,覆盖原代码文件保存。 3....报错:IDEA :Error:(1, 1) java: 非法字符: '\ufeff’ ? 4....解决这个问题就很简单了,在项目里面,对每个代码文件先把编码换成GBK,再换成UTF-8(一个一个来别嫌麻烦);点击convert即可; ?

5.5K20

Unicode,GBK和UTF-8

而我之所以就这个问题专门写一篇文章,原因是前两天在与公司一位有十几年工作经验的JAVA程序员对接 API时, 我问他返回的汉字是什么编码的, 而他回答说"直接返回unicode”....字符编码 有了字符集, 我们现在可以用任意数字来表示现实的字符了. 但字符要保存在计算机,必须要先经过编码. 有人问, 数字直接保存在内存里不就行了吗?...假如我们有四个数字,1,2,3,4要保存在计算机里, 如果约定了utf-8编码, 那么在内存的表示则如下: 00000001 00000010 00000011 00000100 其他的编码规则有utf...其他 在Windows的Notepad.exe, 保存文件的格式可以看到有如下几种: notepad 可刚刚不是说Unicode只是字符集吗, 为什么上面显示可以保存为Unicode"编码”?...在Windows的世界, 存在着ANSI字符串(在当前系统代码页, 不可拓展),以及Unicode字符串(内部以UTF16-LE编码保存).

1.5K20

java编译报错提示编码GBK的不可映射字符啥意思_java字符串编码转换

在我想要在命令行使用println输出一些中文的时候,发现编码出现错误 ---- 原因: java程序在编译的时候,需要使用JDK开发工具包的JAVAC.EXE命令,而JDK开发工具包是国际版的,默认格式为...JAVA内部默认的UNICODE格式放到内存。...然后,javac把转换后的UNICODE格式的文件进行编译成class类文件,此时.class文件是UNICODE编码的,它暂放在内存,之后,JDK将此以UNICODE编码编译后的.class文件保存到操作系统形成我们见到的...这里编译java源程序时出现的错误: 编码 GBK 的不可映射字符 (0x80)的主要原因是,在编写java源程序代码时代码添加了中文注释,且java文件的编码格式不是ANSI编码格式,导致在编译java...操作方法为:选择菜单栏的编码,选择“ANSI格式编码“,选择后保存即可 2.使用使用命令javac -encoding UTF-8编译,以HelloWorld.java的源程序为例,编译时执行的命令为

1.7K20

再再谈java乱码:GBK和UTF-8互转尾部乱码问题分析(续)

在《再谈java乱码:GBK和UTF-8互转尾部乱码问题分析》我们分析了,如果从一个UTF-8 的字节序列,经过 new String(b,"GBK") 的操作,"可能"(与总字节数有关)会破坏数据。...同时,可参考:一段java代码带你认识锟斤拷 GBK字节码用UTF-8解码 来看一段代码: public static void main(String[] args) throws IOException...例子的三个汉字,用UTF-8 转一次为什么不是意料中的9字节,而是14个字节呢? 我们把代码改一下,打印一下二进制。..."UTF-8"); System.out.println(str); 输出结果: 比如用 “中国86" 来测试,java8,打印是这样的: �й�86 而 java6、7打印是这样的: �й� 如此看来...因此jdk6、7的破坏性更强,java8的规则是优化了的结果,尽可能保留了有效数据,这也是unicode占位符的初衷。

2.1K30
领券