2017-06-13 60 views
0

我有一个WPF RichTextBox,它完美加载RTF内容(英文字符)。尝试在编辑器中设置日文字符(例如,ーザに)时出现问题。如果这样做,结果如下:在WPF RichTextBox中设置日文字符

After textRange.Load

看来一些关于编码...... 所以我适应我的代码,而不是使用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

提前感谢!

+0

Encoding.Unicode .GetBytes(文本)这是什么默认为UTF-8? –

+0

@ johnny5你是什么意思? –

回答

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 + "?")) 
+0

感谢您的回答!您的解决方案似乎可行,但是当我尝试设置DataFormats.UnicodeText时,我收到了“附加信息:'UnicodeText'数据格式不受支持。”例外。不支持? –

+0

对不起,我的意思是'DataFormats.Text'和'Encoding.UTF8.GetBytes'。 – Xiaoy312

相关问题