- PR -

SJIS→UTF-8

1
投稿者投稿内容
忍者009
会議室デビュー日: 2004/10/08
投稿数: 15
投稿日時: 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;
}

以上のコースでダメでした。

ご教授願い。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-10 18:10
ソースコードがどんな文字コードで保存されたかどうかは気にする必要はありません。
コンパイルすれば unicode で保持されますので。
JSPやサーブレットで出力するさいはコンテナが自動的にエンコードしてくれますので特に気にすることはありません。

ちなみに SJIS/Shift_JIS/UTF-8 がごっちゃになっていませんか?

また、話題が大幅にずれますが chart と chat は全く別び単語です。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)