- PR -

SJIS→UNICODE変換について

1
投稿者投稿内容
ヒロ
会議室デビュー日: 2006/06/27
投稿数: 3
投稿日時: 2006-06-27 20:11
ORACLEとWeblogicを使用しています。

SJIS→UNICODE変換でおおむねうまくいってるのですが、
SJISで同じ文字でコードが違う物があり(「≒」は「8790」と「81E0」がそんざい)
その文字に対応するUNICODEは1つのため、上記の2文字は同じ文字と介錯されてしまいます。
このような状態を回避したいのですが、方法を教えて頂きたいです。

DBからのデータの取得は
ResultSet.getString()とResultSet.getBytes()を使用して試してみました。
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-06-27 23:03
こんばんは。

Unicodeの文字を眺めて該当の文字を探したことが
無いので確定的にはいえないですが、
下記Shift-JISの二つの文字がUnicodeにおいて同一コードポイント
にマップされるようであれば、回避する方法はないのではないのでしょうか?

それよりも、区別をしたい”理由”があるのでしょうから、
それに対応した解決方法を模索することが必要かと思います。
ヒロ
会議室デビュー日: 2006/06/27
投稿数: 3
投稿日時: 2006-06-28 18:08
saiさん

やっぱりそうなんですね。
DBからの取得時にgetBytesを使えばうまくいくという話を聞いたんですが、
それもうまくいかなかったので・・・。

区別したい理由はDB暗号化を自前で作っており
その暗号化の過程でキーによってはそのコードが出現してしまうんです。
お互いを区別しないと複合化出来ないため、四苦八苦しております。
luckseed
常連さん
会議室デビュー日: 2006/05/23
投稿数: 24
投稿日時: 2006-06-28 19:59
getBytesで取得した時点で、Unicodeのbyte配列になっているということでしょうか?
SJISのbyte配列であれば、それを複合化してからStringに変換すればいいような気も。
もしかして、暗号化されたデータをDB上で文字列として扱ってるんでしょうか?
SJIS⇔Unicodeの変換と暗号化/複合化を行っているタイミングが良く分からないなぁ・・・
ヒロ
会議室デビュー日: 2006/06/27
投稿数: 3
投稿日時: 2006-06-28 20:49
luckseedさん

getBytesで取得した時点でUnicodeの文字型になっています。
DBのカラムはVARCHAR2で指定してあります。

処理の流れとしては
DBからByte配列で取得。
Byte配列を暗号化/複合化処理で変換
処理後のByte配列をtoStringでString化
です。
luckseed
常連さん
会議室デビュー日: 2006/05/23
投稿数: 24
投稿日時: 2006-06-29 12:54
ごめんなさい、まだ処理の流れが理解できません・・・

ところで、8790と81E0は、同じ文字と認識してる訳ではなさそうですよ。
8790は認識不能文字として、\ufffdとなるようです。

それから、getBytesがだめなら、getBinaryStream等もありますよ。
1

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