2016-04-08 31 views
-3

我有一个简单的C#Windows窗体应用程序,可将富文本(从PDF或DOC粘贴)转换为RTF标记。然而,每当我在亚洲字符粘贴这样的: ありがとうございました 的RTF标记中的字符转换为十六进制的代码是这样的: \'82\'a0\'82\'e8\'82\'aa\'82\'c6\'82\'a4\'82\'b2\'82\'b4\'82\'a2\'82\'dc\'82\'b5\'82\'bd防止C#Rich Text Box将亚洲字符转换为十六进制

任何人都知道,如果它可以防止这一点,并有RTF标记保留的实际亚洲字符?我知道这在理论上是可行的,因为如果我将实际字符粘贴到RTF标记窗口中,它们不会被转换。

每请求这里的实际代码,推动RTF文本转换成纯文本字段......这哪里是亚洲字符被转换了一点:这里应用的

private void rtfBox_TextChanged(object sender, EventArgs e){ 
    plainTextBox.Text = rtfBox.Rtf.ToString(); 
} 

来源,如果有人想进一步看到: https://github.com/cemerson/RTFMarkupHelper

相关/可能重复:

+0

看看这可能吗? http://stackoverflow.com/questions/3446649/richtextbox-rtf-return-unicode-format-or-ansi-format –

+1

'这里的应用程序的构建,如果任何人想看到它在行动'张贴您最小的,可编译的代码在这里重现问题。 – Eser

回答

-1

它保留亚洲字符。十六进制对unicode值进行编码,这些值不是由RTF spec使用的ANSI编码中直接表示的值。在“Save RTF”按钮下面添加下面的代码,你就可以将该文件保存为.rtf文件,然后在wordpad/etc中打开它。

private void button6_Click(object sender, EventArgs e) 
    { 
     SaveFileDialog sfd = new SaveFileDialog(); 
     sfd.Filter = "RTF File|*.rtf"; 
     sfd.DefaultExt = ".rtf"; 
     if (sfd.ShowDialog() == DialogResult.OK) 
     { 
      FileInfo fi = new FileInfo(sfd.FileName); 
      StreamWriter sw = new StreamWriter(fi.OpenWrite()); 
      sw.Write(textBox.Text); 
      sw.Close(); 
     } 
    } 
+0

我很欣赏你的建议,但在我的情况下,我需要首先防止字符被转换。也许这是不可能的? –

+0

@ChrisEmerson这是不可能的,RTF文件以ASCII编码,除了通过转义序列以外,它不支持UTF-8的完整Unicode。维基百科文章中的[字符编码](https://en.wikipedia.org/wiki/Rich_Text_Format#Character_encoding)部分对此进行了相当好的解释。 – Kateract

+0

这看起来很严峻,但我不想放弃。让我感到困惑的是,我可以手动将亚洲字符粘贴到纯文本框中以及rtf文本框中,以便我知道这些字符可以在任何地方“生活”。问题似乎是转换过程。我的另一个挑战是弄清楚字符串之间的区别:“\ u20302”和这个:“\ p20 \ a23 \ e44”。 无论如何 - 你很可能是对的,但我希望有更长的希望和修补/研究更多。 –

相关问题