none
環境依存文字 RRS feed

  • 質問

  • VB.Net2005+SQL Server2005でアプリを作成しました。
    OSはVistaで実行し、テキストボックスから以下の環境依存文字を
    入力し、登録し、次に表示しますと?と文字化けします。
    ㈶、㊖、㈳、㊢など
    表示させる方法はないのでしょうか?
    よとしく、お願いいたします。

    2009年11月27日 1:20

回答

  • SQL Serverではnvarcharやncharなどで保存するようにし、VB.NET2005で保存する時にはNプレフィックスで以下のように囲んでみて下さい。
    N'㈶'
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年11月27日 4:12
    モデレータ
  • 「Unicodeにあって、CP932に存在しない文字」を環境依存文字とは普通言いません。
    下記コードで、例外(EncoderFallbackException)が発生するかどうかで判定はできます。
       Dim r As String = "123㊢"
       Dim cp932e = Encoding.GetEncoding(932, New EncoderExceptionFallback, New DecoderExceptionFallback )
       cp932e.GetBytes(r)
    結果:System.Text.EncoderFallbackException: インデックス 3にある Unicode 文字 \u32A2 を指定されたコード ページに変換できません。


    jzkey
    2009年11月27日 14:54
  • nchar とは何か、調べてみました。

    nchar および nvarchar (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms186939.aspx

    「固定長 (nchar) または可変長 (nvarchar) の Unicode データで、UNICODE UCS-2 文字セットを使用する文字データ型です。」

    このことから、nchar は Unicode の文字列を格納できると言うことですし、.NET での文字列は Unicode で扱われていますので、これまでの文字が入らなくなることはなさそうに思います。

    ただし、固定長の場合は、2 文字分で 1 文字を表現する サロゲートペア がぎりぎり入らないということがあるかもしれません。
    (ただ、これは CP932 に存在した文字かどうかは何とも言えません)
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年11月28日 2:43
    モデレータ

すべての返信

  • SQL Serverではnvarcharやncharなどで保存するようにし、VB.NET2005で保存する時にはNプレフィックスで以下のように囲んでみて下さい。
    N'㈶'
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年11月27日 4:12
    モデレータ
  • もう一つ質問ですが、環境依存文字は、プログラムで判断がつきますか?
    つくようでしたら、簡単なサンプルでよいので
    教えてください。
    よろしく、お願いいたします。
    2009年11月27日 7:54
  • 「Unicodeにあって、CP932に存在しない文字」を環境依存文字とは普通言いません。
    下記コードで、例外(EncoderFallbackException)が発生するかどうかで判定はできます。
       Dim r As String = "123㊢"
       Dim cp932e = Encoding.GetEncoding(932, New EncoderExceptionFallback, New DecoderExceptionFallback )
       cp932e.GetBytes(r)
    結果:System.Text.EncoderFallbackException: インデックス 3にある Unicode 文字 \u32A2 を指定されたコード ページに変換できません。


    jzkey
    2009年11月27日 14:54
  • ありがとう、ございます。
    あと、Nプレフィックスを使用して、
    何か注意事項等ありますか?
    例えば、CP932に存在しない文字は
    登録できるようになりますが、
    それ以外の今まで登録できていた文字が
    できなくなるとかです。

    よろしく、お願いいたします。
    2009年11月28日 0:45
  • nchar とは何か、調べてみました。

    nchar および nvarchar (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms186939.aspx

    「固定長 (nchar) または可変長 (nvarchar) の Unicode データで、UNICODE UCS-2 文字セットを使用する文字データ型です。」

    このことから、nchar は Unicode の文字列を格納できると言うことですし、.NET での文字列は Unicode で扱われていますので、これまでの文字が入らなくなることはなさそうに思います。

    ただし、固定長の場合は、2 文字分で 1 文字を表現する サロゲートペア がぎりぎり入らないということがあるかもしれません。
    (ただ、これは CP932 に存在した文字かどうかは何とも言えません)
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年11月28日 2:43
    モデレータ
  • 保存する時にはNプレフィックスで以下のように囲むようにします。
    N'㈶'

    ありがとう、ございました。
    2009年12月2日 6:47
  • フォーラムオペレーターの高橋春樹です。

    trapemiyaさん、jzkeyさん、Azuleanさん
    こんにちは。いつもご投稿ありがとうございます。

    V5さん、はじめまして。
    MSDNフォーラムのご利用有難うございます。
    皆さんからのアドバイスが問題解決に繋がったようで良かったです。
    解決したようなので、大丈夫と思いますが、今回、皆様からの投稿が、有用な情報だと思いましたので、
    勝手ながら、こちらの方で、回答マークを付けさせてもらいました。

    今後ともMSDNフォーラムをよろしくお願いします(^_^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年12月9日 8:38