2017-06-13 61 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

相關問題