C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 文字コード変換がわかりません


(過去ログ 73 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■42716 / inTopicNo.1)  文字コード変換がわかりません
  
□投稿者/ sato (38回)-(2009/10/20(Tue) 15:40:39)

分類:[ASP.NET (VB)] 

今ASP.NETで開発をしているのですが、クライアントから入力されたデータをデータテーブルに
格納してINSERT文を発行しているのですが、MySQLにSQL文を発行した際文字列の長さが長すぎ
ますというエラーが発生しています。
文字列は正しいのですが、文字コードが違うので長さが変わってくるのかなと思いました。
ASP.NETから文字列を直接指定してやった場合は、上手く更新できることを試しました。
ASP.NETの標準のaspxを使っているのですが、文字コードはUTF-8でしょうか。
その場合、やはり変換をしなくてはいけないのでしょうか。
現状では何から何に変換すれば、いいのかも解りません。
http://www.atmarkit.co.jp/fdotnet/dotnettips/799base64/base64.html
でUTF-8を指定してデコードをかけてみましたが、メソッドに入った場合、文字配列の長さが無効ですのエラーが
でてしまいます。
どなたか御教授して頂けないでしょうか。
よろしくお願いします。


引用返信 編集キー/
■42721 / inTopicNo.2)  Re[1]: 文字コード変換がわかりません
□投稿者/ gtk2k (103回)-(2009/10/20(Tue) 16:50:16)
サロゲートペアというUNICODE独特な文字があり、
このサロゲートペア文字は4バイトで1文字となる。
この文字を使用している可能性があると思われる。
引用返信 編集キー/
■42722 / inTopicNo.3)  Re[1]: 文字コード変換がわかりません
□投稿者/ ごう (69回)-(2009/10/20(Tue) 16:52:50)
2009/10/20(Tue) 16:58:26 編集(投稿者)

> ASP.NETから文字列を直接指定してやった場合は、上手く更新できることを試しました。

ここでいう文字列について確認。
INSERT文を、変数を使わずに直接文字列として書き込んだら更新できたってことですかね。
その文字列と言うのは、「クライアントから入力されたデータ」を想定して作ったものですか。

直接INSERT文(文字列)を作ってみて、それでデータの追加が可能であったのなら、
「クライアントから入力されたデータをデータテーブルに格納してINSERT文を発行」の部分が本当に間違っていないかが気になります。

ブレークポイントの使い方は分かりますか?
「INSERT文を発行」しているところにブレークポイントをおいて、どんな文字列が入っているか確認してみてください。
そして、その確認した文字列が(SQL構文として)間違っていないか、確認してみましょう。


追記)
>gtk2kさん
サロゲートペアについて気づいていませんでした (その可能性がありますね)

>satoさん
ご参考までに
http://codezine.jp/article/detail/1592
http://www.thinkit.co.jp/cert/article/0707/14/4/4.htm
引用返信 編集キー/
■42736 / inTopicNo.4)  Re[2]: 文字コード変換がわかりません
□投稿者/ sato (40回)-(2009/10/20(Tue) 20:31:56)
No42721 (gtk2k さん) に返信
> サロゲートペアというUNICODE独特な文字があり、
> このサロゲートペア文字は4バイトで1文字となる。
> この文字を使用している可能性があると思われる。


gtk2kさま、ごうさまありがとうございます。
サロゲートペアって初めて知りました。
対処しなければいけないですね。
後々対応しおうと思います。

>INSERT文を、変数を使わずに直接文字列として書き込んだら更新できたってことですかね。
>その文字列と言うのは、「クライアントから入力されたデータ」を想定して作ったものですか。

>直接INSERT文(文字列)を作ってみて、それでデータの追加が可能であったのなら、
>「クライアントから入力されたデータをデータテーブルに格納してINSERT文を発行」の部分が本当に間違っていないかが気になります。

検証した結果INSERT文に間違いはありませんでした。
文字コードをUTF8からVB.NET内部文字コードであるUNICODE(UTF-16)に変換してやる
http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleModADOS.html
ことで対処できました。


引用返信 編集キー/
■42737 / inTopicNo.5)  Re[3]: 文字コード変換がわかりません
□投稿者/ sato (41回)-(2009/10/20(Tue) 20:32:26)
No42736 (sato さん) に返信
> ■No42721 (gtk2k さん) に返信
>>サロゲートペアというUNICODE独特な文字があり、
>>このサロゲートペア文字は4バイトで1文字となる。
>>この文字を使用している可能性があると思われる。
>
>
> gtk2kさま、ごうさまありがとうございます。
> サロゲートペアって初めて知りました。
> 対処しなければいけないですね。
> 後々対応しおうと思います。
>
> >INSERT文を、変数を使わずに直接文字列として書き込んだら更新できたってことですかね。
> >その文字列と言うのは、「クライアントから入力されたデータ」を想定して作ったものですか。
>
> >直接INSERT文(文字列)を作ってみて、それでデータの追加が可能であったのなら、
> >「クライアントから入力されたデータをデータテーブルに格納してINSERT文を発行」の部分が本当に間違っていないかが気になります。
>
> 検証した結果INSERT文に間違いはありませんでした。
> 文字コードをUTF8からVB.NET内部文字コードであるUNICODE(UTF-16)に変換してやる
> http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleModADOS.html
> ことで対処できました。
>

無事解決しました。ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -