田舎システムエンジニアの日常

アクセスカウンタ

zoom RSS JIS 2004 : X0213 のVista対応方法 ( Java )

<<   作成日時 : 2008/02/05 13:23   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

■JIS 2004 : X0213 のVista対応方法( Java )

すでにどんどん出荷されている最新OSのWindows Vista。
しかし、問題となっているのがWindows VistaでJIS X 0213をサポートしたため、
旧OS(Windows XP等)はその文字を認識できず、“文字化け”が起こる。

JIS X 0213の第一水準〜第四水準漢字1万50字のうち、1061字がXP以前のOSで文字化け!!
文字化けする1061字のうち、サロゲート・ペアコードを使った文字は、303字。
残り758字はフォントの問題で、XP以前のOSでは新しい文字のキャラクタ・コードが
割り当てられていないために文字化けする。

この758字に関しては、XP以前のOSでも新フォントを入れれば、
文字化けなくVistaと同じ字形で表示されるらしい。

↓参考サイトです。
無料ではじめるサイト運営
無料で始まる副収入









参考URL:(Vista文字セット問題 ITpro)
http://itpro.nikkeibp.co.jp/article/COLUMN/20061211/256519/?ST=vista
参考URL:(JIS X 0213:2004 対応と新日本語フォント「メイリオ」について)
http://www.microsoft.com/japan/windows/products/windowsvista/jp_font/default.mspx
参考URL:(Windows XP および Windows Server 2003 向けJIS2004 対応 MS ゴシック & MS 明朝フォントパッケージについて)
http://www.microsoft.com/japan/windows/products/windowsvista/jp_font/jis04/default.mspx


まぁ、新フォントを入れれば文字化けはしないからいいのかもしれないけど、
サロゲート・ペアコードを使った文字の303字で問題が発生しそう!!

そこでサロゲート・ペアをチェックして置換する関数をJavaで作ってみた。
新フォントを導入していない端末(クライアント)もいるかもしれないから、
MS932文字にも変換できなかった場合も置換する。


以下、ソースコード

/**---------------------------------------------------------------
* 文字列をチェックしてJIS2004(X0213)に該当した場合は置換する
*
* @param String strUTF8Value UTF-8でエンコードされている文字列
* @return サロゲートペアチェックされた文字列
*---------------------------------------------------------------*/
public String checkJIS2004_X0213(String strUTF8Value){
String retStr="";
String repStr="■";// 置換文字
for(int i=0;i<strUTF8Value.length();i++){
char s1=strUTF8Value.charAt(i);
char s2=0;
if(i!=strUTF8Value.length()-1)
s2=strUTF8Value.charAt(i + 1);
// サロゲートペア文字かどうかチェック。
// サロゲートペア文字だった場合は置換文字として次の文字をとばす。
if(( 0xD800<=s1 && s1<=0xDBFF ) && ( 0xDC00<=s2 && s2<=0xDFFF )){
retStr += repStr;
i++;
continue;
}
// 新フォントを導入してない端末に対して以下で文字化けを回避!?
// UTF-8文字をMS932(Windows-31J)文字へ変換
String s3=String.valueOf(s1);
String decStr="";
try{
decStr = new String(s3.getBytes("MS932"), "MS932");
}catch(UnsupportedEncodingException err){
// エラーの場合は置換文字とする
decStr = repStr;
}
// UTF-8文字がMS932(Windows-31J)文字と違う場合、変換できない文字として■をセット。
// 等しい場合はそのままの値をセット。
if(!s3.equals(decStr)){
retStr += repStr;
}else{
retStr +=s3;
}
}
return retStr;
}

なんとなくできたかも!
そこでこれを使ってAjax非同期通信でダイレクトに
置換するように考え中です。


無料ではじめるサイト運営
無料で始まる副収入








テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
JIS 2004 : X0213 のVista対応方法 ( Java ) 田舎システムエンジニアの日常/BIGLOBEウェブリブログ
文字サイズ:       閉じる