解決開發(fā)中字符編碼中文顯示亂碼問題的N個(gè)方法

如果是自己開發(fā)從0到1陈莽,基本上是不會(huì)出現(xiàn)字符編碼集錯(cuò)誤遇到亂碼的問題汗捡。

常出現(xiàn)在導(dǎo)入項(xiàng)目的時(shí)候,有可能源項(xiàng)目用的是GBK脸侥,而你用的是utf-8建邓,那么就會(huì)出現(xiàn)亂碼問題。

一般出現(xiàn)的地方都是用中文注釋的字段最容易出現(xiàn)問題睁枕。經(jīng)常因?yàn)樽址幋a的問題出現(xiàn)亂碼官边,造成無法閱讀沸手。

常用的字符編碼無非就這幾種:
百度百科有詳細(xì)介紹
1、GBK
2注簿、UTF-8
3契吉、ANSI
4、Unicode
5诡渴、UTF-8+BOM
6捐晶、Base64
想了解編碼發(fā)展史和各個(gè)編碼集之間的差異可以參考
http://www.qianxingzhem.com/post-1499.html
里面說的很詳細(xì),可讀性比較強(qiáng)妄辩。

而我們經(jīng)常遇到的錯(cuò)誤大概也是GBK和UTF-8產(chǎn)生的沖突惑灵。

常規(guī)修改

如果是編寫安卓程序,或者h(yuǎn)tml眼耀,我們可以用EditPlus英支,或者其他一些第三方編輯器都可以更改字符編碼格式。
拿Editplus來說畔塔,打開Java文件之后潭辈,在窗口下面能看到字符編碼格式,雙擊就可以選擇修改澈吨,修改完之后保存(ctrl+s)把敢。或者File->save as->選擇要保存的字符編碼格式->Y是,覆蓋源文件即可谅辣。

這里需要注意的是默認(rèn)的編碼是ANSI,也就是本地操作系統(tǒng)默認(rèn)的內(nèi)碼修赞。
有些第三方編輯器里的GBK是叫GB2312,一般編輯器里只顯示幾個(gè)常用的,需要其他的編碼需要點(diǎn)擊更多查找桑阶。

IDEA修改

但是如果是Java桌面程序柏副,這種方法似乎就沒那么好用了,如果轉(zhuǎn)換后蚣录,在IDE中顯示正常割择,能正常看萎河,但是一運(yùn)行編譯荔泳,桌面上還是亂碼。

去網(wǎng)上搜了一下說是Java虛擬機(jī)字符編碼集的問題虐杯,
于是在main方法中執(zhí)行了一下
System.getProperties().list(System.out);
然后控制臺(tái)打印了下面的結(jié)果

"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

一共有三個(gè)地方提到了編碼集玛歌。拆分來看:
1、這里是java.vm包也就是JVM虛擬機(jī)擎椰,字面意思就是規(guī)范支子,也可以理解為運(yùn)行規(guī)則。

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

2达舒、是打印控制臺(tái)的配置

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

3值朋、供應(yīng)商的url地址叹侄。(Unicode兼容UTF-8、UTF-7)

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

分析之后結(jié)果就已經(jīng)出來了吞歼。問題就出在jvm運(yùn)行時(shí)出現(xiàn)編碼問題圈膏。

把項(xiàng)目中的源碼修改成jvm運(yùn)行時(shí)的編碼即可。

Java項(xiàng)目源碼中強(qiáng)轉(zhuǎn)

使用Java自帶的gitByte方法進(jìn)行轉(zhuǎn)換,前者是當(dāng)前格式篙骡,后者是要轉(zhuǎn)換的格式
new String(str.getByte("GB2312"),"UTF-8")

最后

如果還是沒有效果那么就只能用最后一個(gè)暴力辦法了稽坤,把源碼重新拷貝剪切。


總結(jié)了一下幾個(gè)開發(fā)過程中遇到的字符編碼問題糯俗。還不夠全面尿褪,歡迎留言補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末得湘,一起剝皮案震驚了整個(gè)濱河市杖玲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淘正,老刑警劉巖摆马,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸿吆,居然都是意外死亡囤采,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門惩淳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕉毯,“玉大人,你說我怎么就攤上這事思犁〈海” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵激蹲,是天一觀的道長(zhǎng)棉磨。 經(jīng)常有香客問我,道長(zhǎng)学辱,這世上最難降的妖魔是什么含蓉? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮项郊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斟赚。我一直安慰自己着降,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布拗军。 她就那樣靜靜地躺著任洞,像睡著了一般蓄喇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上交掏,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天妆偏,我揣著相機(jī)與錄音,去河邊找鬼盅弛。 笑死钱骂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挪鹏。 我是一名探鬼主播见秽,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼讨盒!你這毒婦竟也來了解取?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤返顺,失蹤者是張志新(化名)和其女友劉穎禀苦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遂鹊,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡振乏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稿辙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昆码。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邻储,靈堂內(nèi)的尸體忽然破棺而出赋咽,到底是詐尸還是另有隱情,我是刑警寧澤吨娜,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布脓匿,位于F島的核電站,受9級(jí)特大地震影響宦赠,放射性物質(zhì)發(fā)生泄漏陪毡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一勾扭、第九天 我趴在偏房一處隱蔽的房頂上張望毡琉。 院中可真熱鬧,春花似錦妙色、人聲如沸桅滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丐谋。三九已至芍碧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間号俐,已是汗流浹背泌豆。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吏饿,地道東北人踪危。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像找岖,于是被迫代替她去往敵國(guó)和親陨倡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容