none
ASP.NETで使用しているクラスの中で、メソッドが別のメソッドを呼び出と文字化けする RRS feed

  • 質問

  • ASP.NETでビジネスロジックを呼び出しているクラスがあるのですが、そのクラスの中で、メソッドが別のメソッドを呼び出しています。
    メソッド内から別のメソッドに文字列を引数として渡すと、渡された側で文字列が化けてしまいます?

    デバッグしてみると、渡された時点で化けています。
    ちなみに、文字列は渡す側のメソッド内にハードコードされています。
    なぜこのようなことが起きてしまうのでしょうか?
    どなたかお教え下さい。
    よろしくお願いします。

     

    2007年7月30日 3:05

回答

  • ソースファイルはどういった文字コードで保存されていますでしょうか?
    そのあたりでおかしくなっているような気がします。

     

    2007年7月30日 4:09
  • いつもありがとうございます。
    .vbファイル、.aspxファイルともにUTF8です。
    2007年7月30日 5:23
  • > ちなみに、文字列は渡す側のメソッド内にハードコードされています。

     

    どんな風に書いているんでしょうか?

    2007年7月30日 5:33
  •  

    ご返信ありがとうございます。

    ソースは以下の通りです。
     
    strMsg = "メッセージの内容。"
    SubCallingSub(strMsg, dtShain)

    ※strMsg…String型
    ※dtShain…型付Dataset.型付DataTable

    化けるような要素はないように見えるのですが…

    それから、型付データセットで日本語フィールド名を使用していたときにweb.configへ入れた
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>
    は関係するでしょうか?
    日本語フィールド名はやめたので削りましたが…

    2007年7月30日 5:48
  •  

    暗中模索でどの情報が必要かも分からない状態だと思うので、情報を出し惜しみしているわけではないと思いますが、面倒でも出せるものは全部出して頂かないと、他人は現象が全く掴めず、変に予想するしかありません。

     

    >strMsg = "メッセージの内容。"
    >SubCallingSub(strMsg, dtShain)

     

    普通の人はこれで分かるわけがないので、もう少し詳細を出して頂けると助かります。


    >それから、型付データセットで日本語フィールド名を使用していたときにweb.configへ入れた
    ><globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>
    >は関係するでしょうか?
    >日本語フィールド名はやめたので削りましたが…


    globalization の設定もリクエストやレスポンスのエンコードに何を使うかというだけで、データベースのフィールド名が日本語かどうかは、通常は無関係です。

    メモリ内の文字列操作は全て UTF-16 です。従って、どこかで別のエンコーディングを行っている箇所があるはずです。


    >デバッグしてみると、渡された時点で化けています

    文字が化ける瞬間が分かっているのですよね?
    それとも、渡す前に化けているかどうかはまだ分からないのでしょうか?
    化ける前後のコードが提示されればわかるかもしれません。

    2007年7月30日 6:10
  • ご返信ありがとうございます。

    よく調べてみたら、ソースはUTF8で書かれていたのですが、特定のクラスファイルだけがShifJISで書かれており、このクラスファイルが文字化けの原因でした。

    みなさん、ありがとうございました。

    2007年8月2日 4:16

すべての返信

  • ソースファイルはどういった文字コードで保存されていますでしょうか?
    そのあたりでおかしくなっているような気がします。

     

    2007年7月30日 4:09
  • いつもありがとうございます。
    .vbファイル、.aspxファイルともにUTF8です。
    2007年7月30日 5:23
  • > ちなみに、文字列は渡す側のメソッド内にハードコードされています。

     

    どんな風に書いているんでしょうか?

    2007年7月30日 5:33
  •  

    ご返信ありがとうございます。

    ソースは以下の通りです。
     
    strMsg = "メッセージの内容。"
    SubCallingSub(strMsg, dtShain)

    ※strMsg…String型
    ※dtShain…型付Dataset.型付DataTable

    化けるような要素はないように見えるのですが…

    それから、型付データセットで日本語フィールド名を使用していたときにweb.configへ入れた
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>
    は関係するでしょうか?
    日本語フィールド名はやめたので削りましたが…

    2007年7月30日 5:48
  •  

    暗中模索でどの情報が必要かも分からない状態だと思うので、情報を出し惜しみしているわけではないと思いますが、面倒でも出せるものは全部出して頂かないと、他人は現象が全く掴めず、変に予想するしかありません。

     

    >strMsg = "メッセージの内容。"
    >SubCallingSub(strMsg, dtShain)

     

    普通の人はこれで分かるわけがないので、もう少し詳細を出して頂けると助かります。


    >それから、型付データセットで日本語フィールド名を使用していたときにweb.configへ入れた
    ><globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>
    >は関係するでしょうか?
    >日本語フィールド名はやめたので削りましたが…


    globalization の設定もリクエストやレスポンスのエンコードに何を使うかというだけで、データベースのフィールド名が日本語かどうかは、通常は無関係です。

    メモリ内の文字列操作は全て UTF-16 です。従って、どこかで別のエンコーディングを行っている箇所があるはずです。


    >デバッグしてみると、渡された時点で化けています

    文字が化ける瞬間が分かっているのですよね?
    それとも、渡す前に化けているかどうかはまだ分からないのでしょうか?
    化ける前後のコードが提示されればわかるかもしれません。

    2007年7月30日 6:10
  • ご返信ありがとうございます。

    よく調べてみたら、ソースはUTF8で書かれていたのですが、特定のクラスファイルだけがShifJISで書かれており、このクラスファイルが文字化けの原因でした。

    みなさん、ありがとうございました。

    2007年8月2日 4:16