- - PR -
SJIS→UTF-8
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-10 17:59
日本語文字列はSJISからUTF-8までにencoding変換したいですが。
Java version Java 1.3.1 OS HP-UX B 11 実行フローチャット Jspは <%@ page contentType="text/html;charset=Shift_JIS" %> を設定しています。 ServletソースはUTF-8で保存された /** * UTF-8コード変換処理 * * @param UTF-8変換したい文字列 * @return UTF-8変換した文字列 */ public static String changeUtf_8(String beforeStr){ byte[] dateByte = beforeStr.getBytes(); String afterStr = ""; if( (beforeStr != null) && (!beforeStr.equals("")) ){ try{ afterStr = new String(dateByte,"UTF8"); }catch(UnsupportedEncodingException unSuppot){ //文字のエンコーディングがサポートされていない場合はそのまま返す return beforeStr; } } return afterStr; } 以上のコースでダメでした。 ご教授願い。 |
|
投稿日時: 2004-11-10 18:10
ソースコードがどんな文字コードで保存されたかどうかは気にする必要はありません。
コンパイルすれば unicode で保持されますので。 JSPやサーブレットで出力するさいはコンテナが自動的にエンコードしてくれますので特に気にすることはありません。 ちなみに SJIS/Shift_JIS/UTF-8 がごっちゃになっていませんか? また、話題が大幅にずれますが chart と chat は全く別び単語です。 |
|
投稿日時: 2004-11-10 20:11
JavaのString型は、内部エンコードがUCS-2 16bitUnicodeである前提の
文字列クラスです。基本的には、それ以外のキャラセットでStringが所有 するcharアレイを作成するのは、バグの元なので、通常やらない方が良い と思いますよ。必要ないですし。 #昔、JDBCドライバやServletコンテナが枯れていなかった頃は、嘘String #が作成されてしまうことがあったので、その問題をアプリケーション層で #回避する処理を自作していた時期がありましたが、最近はないですよね? new String(バイトアレイ,キャラセット名) という呼び出しは、バイトアレイのキャラセットが"キャラセット名"である という前提で、"キャラセット名"エンコードのバイトアレイを16bitUnicode エンコードに変換する処理を行い、Stringオブジェクトを作成するという 処理を行います。 String#getBytes()(引数なし)は、「VMが起動しているOS固有のキャラセット」 を使用して、Stringが所有している16bitUnicodeエンコードのcharアレイ を"OS固有のキャラセット名"エンコードのバイトアレイに変換する処理です。 忍者さんがおっしゃるような処理を、そのままソースコードにすると以下のように なります。 byte[] src = ???//Shift_JISエンコードの文字コードによるバイトアレイ String str = new String(src,"Shift_JIS"); byte[] dst = str.getBytes("UTF-8"); //dstはUTF-8エンコードの文字コードによるバイトアレイ |
1