中国語のOracleデータを化けずに取得するには


ようこ  2005-01-12 03:56:17  No: 87785

VB6.0から実行する、中国語のOracleデータ抽出について質問させて頂きます。
[環境]
Windows2003server Standerd Edition
VB6.0
Oracle9.2
※環境変数で「NLS_LANG=Japanese-Japan.UTF8」を定義しています。

行いたい事は、VB6.0からoo4oでOracleに接続し、
select文でデータを抽出するオーソドックスな処理です。
DBはUTF8で作成しており、中国語データ自体は登録されていることは確認しています。
VBでSQLを発行し、レコード結果をセットした時点のイミディエイトで既に化けてしまっています。
ちなみにASPでも同じようにSQLを発行しWEB画面に表示、ということを
しているのですが、こちらは化けずに表示されます。

VB6.0は、デフォルトのテキストボックスではUnicodeデータは化けるため
Microsoft Forms2.0コンポーネントを使用しなければならないというのは
見たのですが、SQLを発行してのデータ抽出についてもなんらかの処理が必要なのでしょうか。

最終的には抽出したデータ内容をメールで送信する、という機能を考えています。
現時点では抽出段階で化けてしまっているので教授お願いします・・・


Dental  2005-01-12 04:38:22  No: 87786

# 回答にあらず。

> ※環境変数で「NLS_LANG=Japanese-Japan.UTF8」を定義しています。
Japanese-Japan ではなく、Japanese_Japan じゃないかな?

> レコード結果をセットした時点のイミディエイトで既に化けてしまっています。
VB6のイミディエイト ペインは、Unicode文字に非対応ですよ。

> ちなみにASPでも同じようにSQLを発行しWEB画面に表示、ということを
ASPでは、ページ(*.asp)ごとに言語のコードページを任意に
指定できるけど、通常のWindowsアプリでは、JA16SJISTILDEが
そのまま使われていて、結果として文字化けしているのでは。と想像。

> VBでSQLを発行し、
SqlPlusなどは、NLS_LANGの設定を自前で読み取って変更しているみたいだけど、
VB6製exeは、環境変数NLS_LANGは処理していないんじゃないかなぁ。
(もしかしたら、OLE DBは NLS_LANG を読み取っているかも知れないけど)


ようこ  2005-01-12 21:00:15  No: 87787

> ※環境変数で「NLS_LANG=Japanese-Japan.UTF8」を定義しています。
>Japanese-Japan ではなく、Japanese_Japan じゃないかな?

あ、すみません。書き込みミスです。本来は正しく記述しています。

> レコード結果をセットした時点のイミディエイトで既に化けてしまっています。
>VB6のイミディエイト ペインは、Unicode文字に非対応ですよ。

イミディエイトは非対応なのですね・・・勘違いしてました。
Selectした結果をMicrosoft Forms2.0のコントロールに貼ったところ
正しく中国語が表示されたので、レコード取得までは問題なく出来ているようです。

データ取得後に変数に格納し、MAPIでメール送信を行なおうとしても
受信したメールの文字が????になっている状態です。
Strconv関数でunicodeにしてみたりしましたがダメでした。


Dental  2005-01-12 22:16:57  No: 87788

> データ取得後に変数に格納し、MAPIでメール送信を行なおうとしても
MAPIMessagesコントロールも、Unicode非対応では…?

    Const C As Integer = &H33A5     '立方メートル

    Dim S As String
    S = ChrW(C)
    If AscW(S) <> C Then
        MsgBox "VB内で文字化けしている。"
        Exit Sub
    End If

    MAPIMessages1.MsgIndex = -1
    MAPIMessages1.MsgNoteText = S
    If AscW(MAPIMessages1.MsgNoteText) <> C Then
        MsgBox "MAPIMessage内で文字化けしている。"
        Exit Sub
    End If

> Strconv関数でunicodeにしてみたりしましたがダメでした。
VB6の文字列は、特に指定しない限り、最初からUnicodeですよ。
それをStrConvでvbUnicodeしたら、2重に変換されて壊れてしまうだけかと。


ようこ  2005-01-13 00:43:20  No: 87789

>MAPIMessagesコントロールも、Unicode非対応では…?

そ、そうなんですか!?Outlook Expressとかで普通にUnicode選べるから
単純に使用できるかと思い込んでました・・・
たしかにDentalさんに記載して頂いたコードを実行すると
MAPIに渡した所で化けてしまってますね。

では中国語を想定したメールをVBから送信する場合、
MAPI以外の手を考える必要があるということでしょうか・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加