在WPF RichTextBox中设置日语字符

时间:2017-06-13 16:38:54

标签: c# wpf unicode richtextbox

我有一个WPF RichTextBox,可以完美地加载RTF内容(英文字符)。尝试将日文字符(例如ユーザに)设置到编辑器中时出现问题。执行此操作时,结果如下:

After textRange.Load

似乎有关于编码的内容... 因此我调整了我的代码以使用Unicode而不是UTF8 。无论如何,它不起作用。我将文本加载到RTF编辑器的代码如下所示:

private void Window_Loaded(object sender, RoutedEventArgs e) {

            string text = "ユーザに";
            TextRange textRange = new TextRange(MyRichTextBox.Document.ContentStart, MyRichTextBox.Document.ContentEnd);
            textRange.Load(new MemoryStream(Encoding.Unicode.GetBytes(text)), DataFormats.Rtf);
        }

最后,XAML布局没有任何特殊内容:

<Window x:Class="Tester.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Loaded="Window_Loaded"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <RichTextBox x:Name="MyRichTextBox" Margin="3"></RichTextBox>
    </Grid>
</Window>

以防它有帮助......我已经在这台电脑上安装了日语,看起来不错。此外,如果我在加载后粘贴(ctrl + v)日文字符,它似乎可以正常工作。

After Control+V

提前致谢!

1 个答案:

答案 0 :(得分:0)

您不能将原始文字用作DataFormats.Rtf。但是,您可以直接设置TextRange.Text属性,也可以使用TextRange.Load(new MemoryStream(Encoding.UTF8.GetBytes("ユーザに")), DataFormats.Text)

包含文本的rtf文档实际上如下所示:

{\rtf
{\ltrch \u12518?\u12540?\u12470?\u12395?}
}

代码:

    var text = 
@"
{\rtf
{\ltrch \u12518?\u12540?\u12470?\u12395?}
}
";

    var range = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
    //range.Text = text;
    range.Load(new MemoryStream(Encoding.Default.GetBytes(text)), DataFormats.Rtf);

可以使用以下行生成unicode:

string.Concat("ユーザに".Select(x => @"\u" + (int)x + "?"))