C#とWPFを利用して、DataGridを使う場合に、ヘッダーで_ (アンダーバーとかアンダースコアと呼ばれる記号)が文字化けが発生するケースがあります。その対処方法をまとめました。
対象は、Visual Studio 2022, .NET 7.0, Windows 7以上 です。
MVVMは使いません。Windows Formsではありません。
XAMLでの特殊文字
WPFの画面はXAMLでコードを書くわけですが、XAMLにも特殊文字と呼ばれる文字があります。< > & ” ‘ などの記号で、そのまま書かない方が良いでしょう。つまり、< > & &qut; ' などに置き換えます。
DataGridのヘッダーに使う場合は、ビルド時にエラーが出るので気がつくと思います。ビルドできてしまう場合もありますが、文字化けしないので問題になるケースは少ないと思います。
実は特殊文字の他に気を付けた方がよい記号があります。こちらはビルドを通り抜けて、実行時に文字化けを発生させるので特殊文字より要注意になるでしょう。
特殊文字より要注意な記号(アンダーバー)
特殊文字の他に、_ (アンダーバーとかアンダースコアと呼ばれる記号)が文字化けの原因になります。こちらはビルドではエラーにならないので気がつかず、動作中の画面をよく見ると文字化けしているという、ちょっと厄介なケースです。
ためしに、こちら【C# WPF】DataGridの使い方の基礎で、ヘッダーに表示さている文字と文字の間にアンダーバーを入れて見ましょう。
次のコードのように『アイテム1』という文字列を『アイテ_ム_1』に変えてみます。
<DataGridTextColumn Header="ア_イ_テ_ム_1" Binding="{Binding Item1}"/>
そして、実行すると次のようになります。
拡大してみると赤で囲った部分が崩れていますね。
実行中の画面とデザインのプレビューで若干異なりますが、いずれにせよ正常な表示ではありません。最初にアンダーバーが見つかった所だけ文字化けが発生しています。
対処方法
そこで対策ですが、アンダーバーを2つに重ねることで回避、つまりエスケープできます。
文字列に含まれているアンダーバーを全て2つに重ねるので、次のように変更します。
<DataGridTextColumn Header="ア__イ__テ__ム__1" Binding="{Binding Item1}"/>
すると、次のように正しく表示されます。
赤で囲った部分、直ってますね。
実はこの現象はDataGridだけでなく、Labelなどでも発生します。対処方法も同じくアンダーバーを2つに重ねることです。つまり、アンダーバーには要注意ということを頭の片隅に入れておくと良いでしょう。
まとめ
DataGridのヘッダーの表示で、_ (アンダーバーとかアンダースコアと呼ばれる記号)が文字化けが発生した時は、次の対策をすると回避できます。
- アンダーバーで文字化けが起きる時は、アンダーバーを2つに重ねることで回避、つまりエスケープできます。
コメント