DOBON.NET DOBON.NETプログラミング掲示板過去ログ

RichTextBoxにドロップやコピペで張り付けた時の文字化け

環境/言語:[Windows Vista/7 C# VC2010 Winアプリ]
分類:[.NET]

お世話になります。

RichTextBox にドロップやコピペで他からの日本語英語混在のテキスト(たとえば、VS2010のコード)をRichTextBox に張り付けると日本語部分が、化けます。

例「// 上a記L2QつAをd書?けPばI、A下o記LのIよaう?なE処?理?はI不s要vとAなEるe。B」

張り付けた直後に、RichTextBox_TextChanged() などでフォント指定して再描画しても、化けた文字は戻りません。

どこかで、「Encoding.GetEncoding("Shift_JIS");」などしなければなりませんか?上記、TextChanged() 内では、処理が重いのかうまく表示しません。

この回避方法ありましたら教えてください。
■No29077に返信(Hiroさんの記事)
> お世話になります。
>
> RichTextBox にドロップやコピペで他からの日本語英語混在のテキスト(たとえば、VS2010のコード)をRichTextBox に張り付けると日本語部分が、化けます。
>
> 例「// 上a記L2QつAをd書?けPばI、A下o記LのIよaう?なE処?理?はI不s要vとAなEるe。B」
>


上記の例をそのままrichtextbox(標準設定)にコピペ(ctrl+v 、 richTextBox1.Paste() など)しましたがまったく文字化けは起こりません。

独自の実装か何かしてるのならば(Cairoで文字表示とか)その部分で文字化けが起きているように思います。もう一度自分のコードを見直してみては?
■No29078に返信(itiさんの記事)
>
> 独自の実装か何かしてるのならば(Cairoで文字表示とか)その部分で文字化けが起きているように思います。もう一度自分のコードを見直してみては?

はい、単語を強調表示するrichTextBox から派生したクラスを張り付けています。
「http://www.codeproject.com/KB/edit/SyntaxRichTextBox.aspx」このサンプルを参考にしています。これにテキストを張り付けたときに文字化けが起こります。

それで、通常のrichTextBox を張り付け同様に張り付けましたが同じように文字化けします。
それで、リッチエディトボックスの仕様?などと思いました。(普通、あり得ないと思いますが.....)

で、もしかすると、派生クラス側のコントロールのエンコードか何かが2バイト文字と合わないとかユニコードがどうのとか考えてみましたが、調べ方がわかりませんでした。

何か調べてみることがありましたら教えてください。お願いします。
■No29077に返信(Hiroさんの記事)
> VS2010のコード)をRichTextBox に張り付けると日本語部分が、化けます。
クリップボードに転送させる時の文字コードは、ファイルのエンコーディングに
左右されます。ファイル(*.vb、*.cs など)のエンコーディングは何ですか?
http://msdn.microsoft.com/ja-jp/library/w11571b4%28VS.80%29.aspx

> この回避方法ありましたら教えてください。
Visual Studio 側がクリップボードに転送する際の問題なので、直接の対策では
ありませんが、元ファイルのエンコーディングの変更で対応できないでしょうか。

あるいはクリップボード内の Unicode テキスト形式は化けないと思うので、
書式が不要なら、それを使ってクリップボードの内容を再調整するとか。
Visual Studio からのコピーの場合、Visual Studo 自体に不具合があるので魔界の仮面弁士さんが提示されているような、運用での回避でないと難しいと思います。

https://connect.microsoft.com/VisualStudioJapan/feedback/details/554411/-word2010
https://connect.microsoft.com/VisualStudioJapan/feedback/details/465826/

なお、修正されるとしたら 2010 の次だと思われます。
2011/09/21(Wed) 12:49:04 編集(投稿者)
2011/09/21(Wed) 12:48:00 編集(投稿者)

■No29079に返信(Hiroさんの記事)
> ■No29078に返信(itiさんの記事)
> はい、単語を強調表示するrichTextBox から派生したクラスを張り付けています。
> 「http://www.codeproject.com/KB/edit/SyntaxRichTextBox.aspx」このサンプルを参考にしています。これにテキストを張り付けたときに文字化けが起こります。
>
> それで、通常のrichTextBox を張り付け同様に張り付けましたが同じように文字化けします。
> それで、リッチエディトボックスの仕様?などと思いました。(普通、あり得ないと思いますが.....)
>
> で、もしかすると、派生クラス側のコントロールのエンコードか何かが2バイト文字と合わないとかユニコードがどうのとか考えてみましたが、調べ方がわかりませんでした。
>
> 何か調べてみることがありましたら教えてください。お願いします。


"たとえばVS2010のコードからのコピペからうまくいかない" ではなく、

"VS2010(限定)からのコピペがうまくいかない" ということですか?

VS2010以外のアプリケーションからのコピペはうまくいっているのでしょうか?

VS2010限定ならAzuleanさん、魔界の仮面弁士さんの発言のとおりの回避策が必要になると思います。(私はVS2008なので現象の再現が残念ながらできません。この場合あなたの力にはなれません。)

それと一応リンク先のプロジェクトをダウンロードしアプリ起動してみましたが、派生コントロールへのコピペによる漢字の文字化けは残念ながらこちらでは確認できませんでした。(漢字が詰まる現象はRichTextBoxLanguageOptionsの設定で回避。!!訂正:回避できません!)プログラムもざっと眺めてみましたが今のところエンコーディング関連の不審な点は見当たりません。
魔界の仮面弁士様、Azulean様、iti様、お世話になります。

情報をもとに確認したところ、どうやらVS2010からのコピペのみのようです。
他のアプリなどからのコピペでは、予測通りの動作をします。
VS2010からのコピペは、アプリのテストのため手っ取り早くテキストを移しただけで、実際にこのような形で使用することはありません。VS2010の仕様なら、それも仕方ないですが、

VS2010にこんな問題が潜んでいたなんて少し驚きです。

> 元ファイルのエンコーディングの変更で対応できないでしょうか。
> あるいはクリップボード内の Unicode テキスト形式
上記の形でコピペ前のテキスト形式変更で対応しようなどと考えもつかないこと、大変勉強になりました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板