- - PR -
SJIS→UNICODE変換について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-06-27 20:11
ORACLEとWeblogicを使用しています。
SJIS→UNICODE変換でおおむねうまくいってるのですが、 SJISで同じ文字でコードが違う物があり(「≒」は「8790」と「81E0」がそんざい) その文字に対応するUNICODEは1つのため、上記の2文字は同じ文字と介錯されてしまいます。 このような状態を回避したいのですが、方法を教えて頂きたいです。 DBからのデータの取得は ResultSet.getString()とResultSet.getBytes()を使用して試してみました。 |
|
投稿日時: 2006-06-27 23:03
こんばんは。
Unicodeの文字を眺めて該当の文字を探したことが 無いので確定的にはいえないですが、 下記Shift-JISの二つの文字がUnicodeにおいて同一コードポイント にマップされるようであれば、回避する方法はないのではないのでしょうか? それよりも、区別をしたい”理由”があるのでしょうから、 それに対応した解決方法を模索することが必要かと思います。 |
|
投稿日時: 2006-06-28 18:08
saiさん
やっぱりそうなんですね。 DBからの取得時にgetBytesを使えばうまくいくという話を聞いたんですが、 それもうまくいかなかったので・・・。 区別したい理由はDB暗号化を自前で作っており その暗号化の過程でキーによってはそのコードが出現してしまうんです。 お互いを区別しないと複合化出来ないため、四苦八苦しております。 |
|
投稿日時: 2006-06-28 19:59
getBytesで取得した時点で、Unicodeのbyte配列になっているということでしょうか?
SJISのbyte配列であれば、それを複合化してからStringに変換すればいいような気も。 もしかして、暗号化されたデータをDB上で文字列として扱ってるんでしょうか? SJIS⇔Unicodeの変換と暗号化/複合化を行っているタイミングが良く分からないなぁ・・・ |
|
投稿日時: 2006-06-28 20:49
luckseedさん
getBytesで取得した時点でUnicodeの文字型になっています。 DBのカラムはVARCHAR2で指定してあります。 処理の流れとしては DBからByte配列で取得。 Byte配列を暗号化/複合化処理で変換 処理後のByte配列をtoStringでString化 です。 |
|
投稿日時: 2006-06-29 12:54
ごめんなさい、まだ処理の流れが理解できません・・・
ところで、8790と81E0は、同じ文字と認識してる訳ではなさそうですよ。 8790は認識不能文字として、\ufffdとなるようです。 それから、getBytesがだめなら、getBinaryStream等もありますよ。 |
1