解决开发中字符编码中文显示乱码问题的N个方法

如果是自己开发从0到1,基本上是不会出现字符编码集错误遇到乱码的问题。

常出现在导入项目的时候,有可能源项目用的是GBK,而你用的是utf-8,那么就会出现乱码问题。

一般出现的地方都是用中文注释的字段最容易出现问题。经常因为字符编码的问题出现乱码,造成无法阅读。

常用的字符编码无非就这几种:
百度百科有详细介绍
1、GBK
2、UTF-8
3、ANSI
4、Unicode
5、UTF-8+BOM
6、Base64
想了解编码发展史和各个编码集之间的差异可以参考
http://www.qianxingzhem.com/post-1499.html
里面说的很详细,可读性比较强。

而我们经常遇到的错误大概也是GBK和UTF-8产生的冲突。

常规修改

如果是编写安卓程序,或者html,我们可以用EditPlus,或者其他一些第三方编辑器都可以更改字符编码格式。
拿Editplus来说,打开Java文件之后,在窗口下面能看到字符编码格式,双击就可以选择修改,修改完之后保存(ctrl+s)。或者File->save as->选择要保存的字符编码格式->Y是,覆盖源文件即可。

这里需要注意的是默认的编码是ANSI,也就是本地操作系统默认的内码。
有些第三方编辑器里的GBK是叫GB2312,一般编辑器里只显示几个常用的,需要其他的编码需要点击更多查找。

IDEA修改

但是如果是Java桌面程序,这种方法似乎就没那么好用了,如果转换后,在IDE中显示正常,能正常看,但是一运行编译,桌面上还是乱码。

去网上搜了一下说是Java虚拟机字符编码集的问题,
于是在main方法中执行了一下
System.getProperties().list(System.out);
然后控制台打印了下面的结果

"D:\Program Files\Java\jdk1.8.0_11\bin\java" -Didea.launcher.port=7532 
"-Didea.launcher.bin.path=F:\JetBrains\IntelliJ IDEA 2016.3.3\bin" -
2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain 
·······
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\Program Files\Java\jdk1.8.0_11\jre...
java.vm.version=25.11-b03
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
idea.launcher.port=7532
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 1
java.vm.specification.name=Java Virtual Machine Specification
user.dir=G:\IdeaProjects\chat-room-JFrame
java.runtime.version=1.8.0_11-b12
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\Program Files\Java\jdk1.8.0_11\jre...
os.arch=amd64
java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator=

java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 7
sun.jnu.encoding=GBK
java.library.path=D:\Program Files\Java\jdk1.8.0_11\bin...
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.1
user.home=C:\Users\Administrator
user.timezone=Asia/Shanghai
java.awt.printerjob=sun.awt.windows.WPrinterJob
java.specification.version=1.8
file.encoding=UTF-8
idea.launcher.bin.path=F:\JetBrains\IntelliJ IDEA 2016.3.3\bin
user.name=Administrator
java.class.path=D:\Program Files\Java\jdk1.8.0_11\jre...
java.vm.specification.version=1.8
sun.arch.data.model=64
java.home=D:\Program Files\Java\jdk1.8.0_11\jre
sun.java.command=com.intellij.rt.execution.application...
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_11
java.ext.dirs=D:\Program Files\Java\jdk1.8.0_11\jre...
sun.boot.class.path=D:\Program Files\Java\jdk1.8.0_11\jre...
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64

Process finished with exit code 0

一共有三个地方提到了编码集。拆分来看:
1、这里是java.vm包也就是JVM虚拟机,字面意思就是规范,也可以理解为运行规则。

java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 7
sun.jnu.encoding=GBK

2、是打印控制台的配置

java.awt.printerjob=sun.awt.windows.WPrinterJob
java.specification.version=1.8
file.encoding=UTF-8

3、供应商的url地址。(Unicode兼容UTF-8、UTF-7)

java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle

分析之后结果就已经出来了。问题就出在jvm运行时出现编码问题。

把项目中的源码修改成jvm运行时的编码即可。

Java项目源码中强转

使用Java自带的gitByte方法进行转换,前者是当前格式,后者是要转换的格式
new String(str.getByte("GB2312"),"UTF-8")

最后

如果还是没有效果那么就只能用最后一个暴力办法了,把源码重新拷贝剪切。


总结了一下几个开发过程中遇到的字符编码问题。还不够全面,欢迎留言补充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容