?? ? 如果大家處理過多語言資源,那么對JDK這個(gè)自帶的native2ascii肯定不會陌生,它能夠幫我們把不同的編碼轉(zhuǎn)化成統(tǒng)一的unicode編碼,來實(shí)現(xiàn)國際化。
?? ?一般我們都這么用,假設(shè)我們有這么一個(gè)文件zh.txt,其內(nèi)容只有這么一行:
?? ?然后我們使用native2ascii來將其內(nèi)容轉(zhuǎn)成unicode編碼:
?
?
?? ?很簡單,但是你考慮過zh.txt文件的編碼了嗎?如果這個(gè)zh.txt文件是別人提供給你的,可能里面是采用了別的編碼,那么如果僅僅是通過簡單的native2ascii zh.txt是不可以的。
?
?? ?很慶幸,native2ascii這個(gè)工具本身提供了一個(gè)encoding選項(xiàng),但是,這個(gè)encoding選項(xiàng)是代表什么意思呢?網(wǎng)上大多數(shù)人都認(rèn)為,這個(gè)是指生成的目的文件的編碼,如,
?
?
?? ?則表示將zh.txt轉(zhuǎn)成ISO 8859-1編碼,真的是這樣的嗎?
?
?? ?還有一些人認(rèn)為,這個(gè)encoding選項(xiàng)所指的是,源文件即zh.txt的編碼格式,這個(gè)解釋有點(diǎn)貼近,但仍不讓我滿意,這個(gè)encoding選項(xiàng)指的應(yīng)該是native2ascii工具讀取源文件zh.txt所采用的編碼方式,如對于上面的iso-8859-1的例子,則表示native2ascii工具將采用iso-8859-1編碼格式來讀取源文件zh.txt,并將其內(nèi)容轉(zhuǎn)化成unicode編碼格式。這樣有什么用呢?這個(gè)就像我前面說的,可能這個(gè)源文件zh.txt可能是別人在他自己的機(jī)器上編寫并提供給你的,要知道linux上默認(rèn)的編碼格式是ISO 8859-1,而window上一般是GBK(對于中文系統(tǒng)),如果我們用GBK的編碼格式來讀取ISO 8859-1編碼的內(nèi)容,可想而知,會發(fā)生什么樣的錯(cuò)誤。
?
?? 這個(gè)也就是下面兩個(gè)不同的native2ascii使用都有一樣的輸出的原因:
?
?
?? 這里沒有指定encoding選項(xiàng),則采用操作系統(tǒng)默認(rèn)的編碼格式來讀取解析zh.txt文件(這里默認(rèn)是GBK)
?
?
?? 這里明確指定了GBK encoding選項(xiàng),可以看到跟上面的輸出一致。
?
?? 最后再讓我們以代碼來驗(yàn)證下以上的說法:
?? 還是zh.txt文件,讓我們以utf-8的編碼來讀取它,
?
?
?? 可以看到輸出為\u04ac\ufffd\ufffd,
?
?? 如果我們是通過代碼來以utf-8的編碼來讀取源文件再轉(zhuǎn)成unicode,會不會結(jié)果也是\u04ac\ufffd\ufffd呢?
?
?? ?
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File(
"C:\\Documents and Settings\\yeson\\zh.txt")), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
for (char c : line.toCharArray())
System.out.println((byte) c);
}
System.out.println();//new line
char[] utf8 = new char[] { '\u04ac', '\ufffd', '\ufffd' };
for (char c : utf8)
System.out.println((byte)c);
?
?? 輸出:
?
?? 可以看到,實(shí)際上是一樣,java中的char本身就是unicode.
?
?
?? 而如果-encoding和-reverse選項(xiàng)并存,則這里的encoding則表示將以什么樣的編碼格式寫入文件,如:???
???
?
?? 這個(gè)表示將轉(zhuǎn)換后的文件以utf8的編碼格式寫入文件utf8.txt.
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

