2017-08-11 8 views
2

私のWPFアプリケーションは、一部のUnicode文字を他のものに置き換えているようです。この単純な例ではWPFでの不一致のUnicode文字の置換

:私はゴシックにフォントを切り替えた場合、私はこれを取得しながら

Result with Segoe UI

<Window x:Class="WPFUnicodeFail.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WPFUnicodeFail" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" FontFamily="Segoe UI" FontSize="40"> 

<StackPanel Orientation="Horizontal"> 
    <Label>◀</Label> 
    <Label>&#x25C0;</Label> 
    <Label>◄</Label> 
    <Label>&#x25C4;</Label> 
    <Label>▲</Label> 
</StackPanel> 

私はこの結果を得ます

Result with Arial

最初の2つのラベルはBLACK LEFT-POINTING TRIANGLE (U+25C0) ◀で、次の2つのラベルはBLACK LEFT-POINTING POINTER (U+25C4) ◄である必要があります。 TRIANGLEは正三角形になっていますが、POINTERは平らになっています。 Segoe UIでは、TRIANGLEはPOINTERに透過的に置き換えられます。 Arialでは、さらに悪いことに、彼らは切り替わります。

ソースコード内の文字自体と&#xコードの両方を使用すると、上記の画像と同じ結果になります。 Wordの2016年に

は、私がのSegoe UIを持つ3種類の文字を試してみて、私は、正しい結果を得る(フォントサイズが同じであっても一貫性のないスケーリングが、それは別の問題です):

Result with Segoe UI in Word 2016

なぜこのようなことが起こりますか?異なるフォントで一貫した結果を得るにはどうすればよいですか?または、少なくとも、Segoe UIとそれをPOINTERに変更するような他のフォントでTRIANGLEを取得するにはどうすればよいですか?

答えて

0

あなたは、Windowsの文字マップを使用しているフォントを確認した場合([スタート]> [プログラム]> [アクセサリ]> [システムツール]> [文字マップ)、あなたはのSegoe UIフォントがU+25C0文字が欠落していることに気づくでしょう、Arialもそうです。私は、これは実装固有のものであると考えていますが、フォントが欠落している文字を表示する必要がある場合、システムはそのようなケースをどのように処理しますか? Segoe UI Symbolフォントを選択すると、WPFアプリケーションで正しく表示された文字が表示されます。たぶん、MS Wordが自動的にこれを行うことができますか?

すべてのシンボルが異なるフォントで正しく表示されるようにするには、文字マップツールを使用してこれらのフォントをチェックする必要があります。

関連する問題