tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルUNICODEをS-JISに変換しDLLに渡す
記事No8418
投稿日: 2008/11/16(Sun) 01:56
投稿者まつ
いつもお世話になっております。
VB2005 Windows Vistaで開発しております。

NO.8409で解決した事の1歩先でまた躓いてしまいました。


'カンマ区切りテキストを読み込み、データテーブルに追加
Dim parser As New TextFieldParser(Adress, _
       System.Text.Encoding.GetEncoding("Shift_JIS"))

ご教授いただいたとおり、上記の方法でCSVをデータテーブルに取り込み
DataGridViewに正しく表示することができました。

そこで問題なのですが、DatagridViewで全半角混合のセルを
漢字はSHIFT JISでDLLに渡さなければならないのですが、
いくらやっても文字化けでこまっております。

文字コードを変換する関数は以下の通りです。

Public Function UniToJIS(UNICODEの変数) as String

'UNICODEをSJISに置き換え
Dim Bytes = System.Text.Encoding.UTF8.GetBytes(UNICODEの変数)
  UniToJIS = System.Text.Encoding.GetEncoding(932).GetString(Bytes)
Return

Exit Function

この関数の戻り値をDLLにセットしてもどうしても文字化けしてしまいます。

同じように、TEXTファイルをTextboxに取り込み、上記の方法で
TEXTBOXをSHIFTJISに変換し変数に入れているのですが、
これも文字化けです。
取り込んだTextFileをTextBoxに表示までは正しく行えております。


TextFileの取り込みは
Dim sr As System.IO.StreamReader = New System.IO.StreamReader( _
OFDialog.FileName, System.Text.Encoding.GetEncoding("Shift_JIS"))
上記方法で行いました。

お分かりになりましたらご教授して頂けないでしょうか。

[ツリー表示へ]
タイトルRe: UNICODEをS-JISに変換しDLLに渡す
記事No8419
投稿日: 2008/11/16(Sun) 06:12
投稿者魔界の仮面弁士
>  Dim Bytes = System.Text.Encoding.UTF8.GetBytes(UNICODEの変数)
あれ? VB2005 を使っておられるのですよね。だとすると上記の変数 Bytes は、
Object 型(またはコンパイルエラー)になってしまいませんか?


> この関数の戻り値をDLLにセットしてもどうしても文字化けしてしまいます。
どのようにして DLL を呼び出しているのでしょうか?
少なくとも文字列(String型)には、文字コードという概念はありませんよ。

文字列を、ファイルやバイト配列等にエンコードする際(または逆にデコードする際)には
文字コードを意識せねばなりませんけれども。

[ツリー表示へ]
タイトルRe^2: UNICODEをS-JISに変換しDLLに渡す
記事No8420
投稿日: 2008/11/16(Sun) 13:25
投稿者まつ
魔界の仮面弁士様
有難う御座います。


JISへの変換の記述を修正したらできました。

'UNICODEをSJISに置き換え
   Dim sjisEnc As Encoding = Encoding.GetEncoding(932)
   Dim bytesData As Byte() = Encoding.Convert(Encoding.UTF8, sjisEnc, Encoding.UTF8.GetBytes(Uni))
   戻り値 = System.Text.Encoding.GetEncoding(932).GetString(bytesData)

毎回、ご丁寧な回答を頂き、深く感謝いたします。

[ツリー表示へ]