プロが教える店舗&オフィスのセキュリティ対策術

ASP.NETをVBで開発しています。
無償の ASP.NET ホスティング 「WebMatrixHosting Japan」で実行しています。

表題の件ですが、シフトJISのHTMLページから
UTF-8のASPXページへPOSTした時に、文字化けすることで困っています。
シフトJISの値をUTF-8に変換できる方法をご存知の方、教えてください。お願いします。
ASCII文字は問題なく実行できます。

以下検証中のコードです

ファイル名:SJIS.htm
<form action="UTF-8.aspx">
<input type="text" name="username">
<input type="submit">
</form>

ファイル名:UTF-8.aspx
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IF request.form("username") <> "" THEN
DIM strIn AS String = request.form("username")

Dim bytesData As Byte() = System.Text.Encoding.GetEncoding("shift_jis").GetBytes(strIn)
Dim outPut As String = System.Text.Encoding.GetEncoding("UTF-8").GetString(bytesData)
Literal1.Text = outPut
END IF
End Sub

A 回答 (3件)

検索して次のページを見つけました


http://www.microsoft.com/japan/technet/prodtechn …
これによると、request.form は、UTF8エンコードをサポートしないとか書いてあります。
また、request.formを使う場合はテキスト形式(ANSI)でページを保存せよと書いてあります。(ちょっと意味不明)

UTF8のページからポストできるならUTF8のページで統一した方がいいかもしれません

参考URL:http://www.microsoft.com/japan/technet/prodtechn …
    • good
    • 0
この回答へのお礼

BLUEPIXYさんありがとうございます。
教えて頂いたTechNetのページを見ました。

シナリオ 3: ~Request.Form、~などのメソッドは、UTF-8 エンコードをサポートしません。~

シナリオ 5: ASP ページをテキスト形式 (ANSI) として保存すると、ページが機能します。

というところが気になりました。しかし、相変わらずMSのページは私の国語力不足からかさっぱり意味が分かりませんが、BLUEPIXYさんのおかげで方向性が見えてきました。ありがとうございます。

BLUEPIXYさんのアドバイス通りUTF8のページで統一した方がいいのかもしれません。

新しい言語を始めると、必ず文字コード変換で困ってしまいます。文字コードでつまづいた時だけ、日本人に生まれたことを軽く後悔してしまいます。。。

お礼日時:2005/07/15 10:50

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
とか(未確認)
    • good
    • 0

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)

みたいな感じでできませんかね(未確認)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

教えて頂いたコードは実行できませんでした。
というのも最終的には、outPutを出力させて
みましたが何も出力されませんでした。

追加で
IF outPut = "" THEN
Response.write("NULLかも")
END IF
としたところ、見事に?
NULLかもと表示されました。
ちなみにUTF-8のページからPOSTすると、
ちゃんと表示されます。。。

お礼日時:2005/07/14 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!