亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java字符丟失與中文編碼

2019-11-18 13:57:49
字體:
來源:轉載
供稿:網友

  1. 引言
在用java進行開發時,偶然在IO操作中會產生字符丟失現象。如在用BEA的WORKSHOP開發CMP EJB過程中,總是編譯不通過,報錯:

cannot resolve symbol

symbol : class Excetion

location: class eaitest.vip.firmorder.FirmOrderBean_g8ghds__WebLogic_CMP_RDBMS

} catch (Excetion ex) {

可以看到明顯“Excetion”拼寫錯誤。而這段代碼是WORKSHOP自動生成。但是,在某些機器上,同樣的工程文件,編譯就能通過。聯系BEA工程師,也不能解決此問題。

筆者查閱大量資料,很難找到相關問題的介紹。一次在偶然查閱SUN的缺陷庫[i]時,發現是由于GB18030中文編碼問題所致。

2. 問題分析
國家標準GB18030-2000《信息交換用漢字編碼字符集基本集的擴充》是我國繼GB2312-1980和GB13000-1993之后最重要的漢字編碼標準,是我國計算機系統必須遵循的基礎性標準之一。國家質監總局規定GB 18030過渡期(即2001年8月31日)后正式發布或出廠的產品,必須符合GB-18030相關要求。

操作系統默認內部編碼一般并不是GB18030,目前已知在WINDOWS XP操作系統中,進行某些組件的升級后,會把操作系統的默認編碼由GB2312變更為GB18030。

但是即便在最新發布的JDK1.4.2_06版本中,對其支持仍存在一定問題。GB18030問題主要表現是,基于java的應用,涉及GB18030編碼與其它編碼方案轉換時,存在字符丟失現象。

問題的原因是java在處理由sun.nio.cs.ext.ExtendedCharsets提供的擴展字符集時,會進行字符緩沖。但是對于緩沖字符沒有采用新的sun.nio.cs.ext包處理,而是延用原有處理方式,這種方式在多線程操作下對GB18030編碼方案處理存在問題,這樣導致部分字符丟失。

此問題只影響GB18030編碼方案,對GB2312等中文編碼方案并沒有影響。

當操作系統默認編碼方案為GB18030時,假如進行文件寫操作,未指定編碼方案情況下,java采用操作系統默認編碼方案操作,這時最輕易出現GB18030問題。

查看操作系統默認編碼,可以運行如下java程序:

public class EchoDefaultSystemEncoding{

public static void main(String[] args){

String encoding=System.getPRoperty(“file.encoding”);

System.out.println(“Default System Encoding: ” + encoding);

}

}

在用WORKSHOP開發CMP EJB出現問題的操作系統默認編碼即為GB18030。

由于碰到此問題的人比較少。而真正碰到時,很多人通過重新安裝操作系統可以解決問題,因而這方面的資料很難找到。

3. 解決辦法
最理想的解決辦法就是由SUN修正此BUG。此問題早在2003年11月即提出,但是直到目前(2004/12/30),問題狀態仍為“In process, bug”。

替代的解決方案主要思路是避開GB18030編碼,主要有兩種方法

改變操作系統默認編碼方案

對于unix/linux平臺,修改操作系統編碼方案很簡單。如在solaris平臺下,運行如下命令即可改變系統編碼:

LANG=zh.GBK;export LANG

對于windows平臺,修改操作系統中文默認編碼比較復雜。嘗試把操作系統的“區域和語言選項”更改為其它地區,選用其它語言,都沒有效果。與微軟客戶服務聯系,也不能提供相應解決方案。

運行java應用時指定默認編碼

在運行基于JAVA的應用時,加上參數:

java ?CDfile.encoding=GB2312

把java應用的默認編碼方案與GB2312硬綁定,即在未指明編碼方案時,采用GB2312編碼。

假如針對每個應用,進行上述修改,工作量很大。有些應用里面又隱式調用外部JAVA應用,更增加修正的難度。比較可行的辦法是對java的運行文件進行修正,令其在運行時自動加上“-Dfile.encoding=GB2312”參數。

建議windows平臺采用本方法進行修正。方案如下:

1、改名原java.exe,javaw.exe,如改為javabak.exe,javawbak.exe

2、重寫java.exe和javaw.exe,令其運行時調用javabak.exe,javawbak.exe,并在運行時加上“-Dfile.encoding”參數。

如下c代碼即可完成上述功能:

#include "string.h"

#include "stdlib.h"



int main(int argc, char* argv[])

{

char arg[100000] = "javabak.exe -Dfile.encoding=GB2312 ";

for(int i=1; i<argc; i++){

strcat(arg,argv[i]);

strcat(arg, " ");

}

system(arg);

return 0;

}

編譯后(注重修改arg值),生成的文件命名為java.exe和javaw.exe,放置在<JAVA_HOME>/bin和<JAVA_HOME>/jre/bin目錄下,即可。

經實踐,此辦法可以解決GB18030問題,并且不會帶來其它隱患。唯一的缺點是在運行JAVA應用時,會有一個額外的DOS窗口打開,此窗口可以關閉,不會對應用運行帶來影響。

4. 總結
在應用開發中,中文編碼一直是一個比較麻煩的問題。盡管目前GB18030是國家強制性標準,有著各種各樣的優點,但由于其推出時間尚短,在應用方面對其支持還不夠完善,還是應盡可能采用GB2312等兼容性比較強的中文編碼方案。

本文給出的解決方案,不僅適用于解決JAVA平臺對GB18030支持問題,而且,也為指定通用JAVA運行默認參數,提供了另一種思路。



--------------------------------------------------------------------------------

參考文獻

[i] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4954023

上一篇:JAVA專業術語集

下一篇:Java縱橫談

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91超碰caoporn97人人| 欧美成人午夜视频| 色婷婷亚洲mv天堂mv在影片| 久久久亚洲福利精品午夜| 狠狠操狠狠色综合网| 久久久久久91| 国产精品电影在线观看| 一本色道久久88综合日韩精品| 欧美国产日韩二区| 欧美日韩亚洲一区二| 97超碰蝌蚪网人人做人人爽| 亚洲专区中文字幕| 亚洲欧美成人网| 人人爽久久涩噜噜噜网站| 国产裸体写真av一区二区| 7777免费精品视频| 伊人青青综合网站| 日韩在线免费高清视频| 91精品视频在线免费观看| 97碰碰碰免费色视频| 国产91av在线| 国产精品丝袜白浆摸在线| 黑人极品videos精品欧美裸| 国产精品自产拍在线观看| 国产精品xxxxx| 日韩在线观看免费| 亚洲视频综合网| 亚洲欧美日韩国产成人| 国产在线一区二区三区| 一区二区欧美激情| 欧美大荫蒂xxx| 亚洲免费av片| 国产免费一区视频观看免费| 精品国产乱码久久久久久天美| 91中文精品字幕在线视频| 成人久久18免费网站图片| 欧美多人爱爱视频网站| 九九热在线精品视频| 亚洲欧洲一区二区三区在线观看| 欧美人与性动交| 日韩精品在线观看网站| 久久人人爽人人| 欧美日韩亚洲一区二| 亚洲а∨天堂久久精品9966| 国产精品视频公开费视频| 日韩欧美中文免费| 欧美亚洲另类激情另类| 亚洲加勒比久久88色综合| 成人国产精品日本在线| 亚洲三级黄色在线观看| 成人字幕网zmw| 欧美精品福利视频| 国产精品久久久久久搜索| 欧美丰满片xxx777| 久久成年人免费电影| 69**夜色精品国产69乱| 日本成人在线视频网址| 亚洲精品视频免费| 精品久久国产精品| 国产精品中文字幕久久久| 亚洲欧美日韩综合| 精品动漫一区二区三区| 久久久av网站| 亚洲综合大片69999| 在线中文字幕日韩| 91亚洲精品一区| 欧美黑人巨大精品一区二区| 俺去了亚洲欧美日韩| 中文国产亚洲喷潮| 中文字幕av一区二区| 欧美三级免费观看| 国产在线a不卡| 欧美在线观看网站| 国产91|九色| 亚洲韩国日本中文字幕| 亚洲网站在线播放| 亚洲欧美日韩一区二区三区在线| 91地址最新发布| 国产日本欧美一区二区三区在线| 国产精品欧美亚洲777777| 韩国19禁主播vip福利视频| 久热精品视频在线| 欧美日韩中文字幕日韩欧美| 欧美视频专区一二在线观看| 久久91超碰青草是什么| 久久久欧美一区二区| 国产成人精品在线观看| 久久久成人精品视频| 中文日韩在线视频| 久99久在线视频| 亚洲高清久久久久久| 亚洲网站在线播放| 性色av一区二区三区免费| 伊人久久大香线蕉av一区二区| 浅井舞香一区二区| 国产精品美女www爽爽爽视频| 亚洲a中文字幕| 亚洲一区二区三区久久| 38少妇精品导航| 欧美电影在线观看| 26uuu日韩精品一区二区| 精品国产欧美成人夜夜嗨| 国产拍精品一二三| 国模gogo一区二区大胆私拍| 日韩av网站在线| 国产成人精品免费久久久久| 理论片在线不卡免费观看| 91免费视频国产| 日韩av综合中文字幕| 欧美大秀在线观看| 国产大片精品免费永久看nba| 亚洲精品www久久久| 成人精品久久av网站| 午夜精品一区二区三区av| 久久成人国产精品| 57pao成人国产永久免费| 色综合天天狠天天透天天伊人| 国产精品欧美久久久| 欧美亚洲一区在线| 成人免费淫片视频软件| 九九热最新视频//这里只有精品| 国产一区二区久久精品| 日本午夜精品理论片a级appf发布| 久久久久免费视频| 亚洲人在线视频| 国产精品久久久久免费a∨| 中文字幕国内精品| 欧美精品videosex牲欧美| 国产精品视频内| 国产精品久久久久久久一区探花| 欧美在线视频a| 亚洲欧美在线第一页| 国产精品久久久久免费a∨| 国产精品福利久久久| 国产精品女人网站| 国产精品18久久久久久麻辣| 日韩av在线一区二区| 国产女人18毛片水18精品| 欧美性视频精品| 亚洲国产成人久久综合| 国产精品劲爆视频| 疯狂欧美牲乱大交777| 海角国产乱辈乱精品视频| 成人一区二区电影| 97久久超碰福利国产精品…| 欧美日韩国产一中文字不卡| 久久久精品亚洲| 欧美国产极速在线| 亚洲视频一区二区三区| 欧美成人免费小视频| 久久久精品国产网站| 日韩三级成人av网| 91九色单男在线观看| 成人中文字幕在线观看| 亚洲aⅴ男人的天堂在线观看| 日韩电影在线观看永久视频免费网站| 国产成人亚洲综合| 久久精品国产久精国产思思| 91精品视频大全| 亚洲人精品午夜在线观看| 欧美性感美女h网站在线观看免费| 国产精品91久久| 亚洲成人国产精品| 日韩成人av网址|