我有一个WPF RichTextBox,可以完美地加载RTF内容(英文字符)。尝试将日文字符(例如ユーザに)设置到编辑器中时出现问题。执行此操作时,结果如下:
似乎有关于编码的内容... 因此我调整了我的代码以使用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)日文字符,它似乎可以正常工作。
提前致谢!
答案 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 + "?"))