- ベストアンサー
ASP.NET SJIS→UTF-8文字コード変換方法
- ASP.NETをVBで開発しており、WebMatrixHosting Japanで実行しています。シフトJISのHTMLページからUTF-8のASPXページへPOSTした際に文字化けする問題に困っています。シフトJISの値をUTF-8に変換する方法を教えてください。
- ASCII文字は問題なく実行できており、検証中のコードは以下の通りです。ファイル名SJIS.htmには入力フィールドと送信ボタンがあり、ファイル名UTF-8.aspxでは受け取った値をシフトJISからUTF-8に変換して表示しています。
- この問題についてアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
検索して次のページを見つけました http://www.microsoft.com/japan/technet/prodtechnol/windows2000serv/technologies/iis/maintain/featusability/interasp.mspx これによると、request.form は、UTF8エンコードをサポートしないとか書いてあります。 また、request.formを使う場合はテキスト形式(ANSI)でページを保存せよと書いてあります。(ちょっと意味不明) UTF8のページからポストできるならUTF8のページで統一した方がいいかもしれません
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Imports System Imports System.IO Imports System.Text Class ConvertExampleClass Shared Sub Main() ' INPUT Dim sr As StreamReader = new StreamReader("sjis.txt", _ Encoding.GetEncoding("shift_jis")) ' OUTPUT Dim Fs As FileStream = New FileStream("UTF8.txt", _ FileMode.Create, FileAccess.Write, FileShare.None) Dim SwFromFileStreamUTF8 As StreamWriter = _ New StreamWriter(Fs, System.Text.Encoding.UTF8) Dim oneLine As String Dim outPuts As String Dim sjisBytes as Byte() Dim utf8Bytes as Byte() Do While sr.Peek() >= 0 oneLine = sr.ReadLine() ' System.Console.WriteLine(oneLine) sjisBytes = Encoding.GetEncoding("shift_jis").GetBytes(oneLine) utf8Bytes = Encoding.Convert(Encoding.GetEncoding("shift_jis"), _ Encoding.GetEncoding("utf-8"), sjisBytes) outPuts = System.Text.Encoding.GetEncoding("utf-8").GetString(utf8Bytes) SwFromFileStreamUTF8.WriteLine(outPuts) Loop sr.Close() SwFromFileStreamUTF8.Flush() SwFromFileStreamUTF8.Close() End Sub End Class ------------------------------------------------------------------ 今ASPでテストできる環境にないので 上記みたいなテストプログラムを書いて、シフトJISのファイルからUTF8に変換してファイルを書き出すことができるのは、確認しました。 ただ、まあ、上記のプログラムは、StreamReaderを作る時点で内部コードに読み込んでいるまた、StreamWriterで内部コードからUTF8に変換するので、シフトJISのバイトに変換してUTF8のバイトに変換してという作業は、ムダなんですけど。 同じような意味では、リクエストを読み込む時点でのエンコードを指定してやるといいかもしれません。 Request.ContentEncoding とか(未確認)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Dim bytesData As Byte() = System.Text.Encoding.GetEncoding("shift_jis").GetBytes(strIn) Dim outBytes As Byte() = Encoding.Convert(Encoding.GetEncoding("shift_jis"), Encoding.GetEncoding("UTF-8"), bytesData) Dim outPut As String = System.Text.Encoding.GetEncoding("UTF-8").GetString(outBytes) みたいな感じでできませんかね(未確認)
お礼
回答ありがとうございます。 教えて頂いたコードは実行できませんでした。 というのも最終的には、outPutを出力させて みましたが何も出力されませんでした。 追加で IF outPut = "" THEN Response.write("NULLかも") END IF としたところ、見事に? NULLかもと表示されました。 ちなみにUTF-8のページからPOSTすると、 ちゃんと表示されます。。。
お礼
BLUEPIXYさんありがとうございます。 教えて頂いたTechNetのページを見ました。 シナリオ 3: ~Request.Form、~などのメソッドは、UTF-8 エンコードをサポートしません。~ シナリオ 5: ASP ページをテキスト形式 (ANSI) として保存すると、ページが機能します。 というところが気になりました。しかし、相変わらずMSのページは私の国語力不足からかさっぱり意味が分かりませんが、BLUEPIXYさんのおかげで方向性が見えてきました。ありがとうございます。 BLUEPIXYさんのアドバイス通りUTF8のページで統一した方がいいのかもしれません。 新しい言語を始めると、必ず文字コード変換で困ってしまいます。文字コードでつまづいた時だけ、日本人に生まれたことを軽く後悔してしまいます。。。