2016-04-08 8 views
-3

Ich habe eine einfache C# Windows Form App, die Rich Text (eingefügt von PDF oder DOC) in RTF Markup konvertiert. Allerdings, wenn ich in der asiatischen Zeichen wie diese ein: ありがとうございました der RTF-Markup wandelt die Zeichen in ihre hexadezimalen Äquivalente wie folgt aus: \'82\'a0\'82\'e8\'82\'aa\'82\'c6\'82\'a4\'82\'b2\'82\'b4\'82\'a2\'82\'dc\'82\'b5\'82\'bdVerhindern, dass C# Rich Textbox asiatische Zeichen in Hexadezimal konvertiert

Wer weiß, ob es möglich ist, dies zu verhindern und hat den RTF-Markup die tatsächlichen asiatischen Zeichen behalten ? Ich weiß, dass es theoretisch möglich ist, denn wenn ich die tatsächlichen Zeichen in das RTF-Markup-Fenster einfüge, werden sie nicht konvertiert.

Pro Anfrage hier ist der eigentliche Code, der den RTF-Text in einem einfachen Textfeld schiebt ... das ist der Punkt, wo die asiatischen Zeichen konvertiert werden:

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

Quelle der App hier, wenn jemand will siehe weiter: https://github.com/cemerson/RTFMarkupHelper

Verwandte/Mögliche Duplikate:

+0

Schauen Sie sich das vielleicht an? http://StackOverflow.com/Questions/3446649/richttextbox-rtf-Return-Unicode-Format-oder-ansi-format –

+1

'Build der App hier, wenn jemand es in Aktion sehen möchte' post Ihren minimalen, kompilierbaren Code zu reproduzieren das Problem hier. – Eser

Antwort

-1

Es ist die asiatischen Zeichen zu erhalten. Hexadezimal codiert Unicode-Werte, die nicht direkt in der ANSI-Codierung dargestellt werden, die von RTF spec verwendet wird. Fügen Sie den folgenden Code unter einem "Save RTF" Button hinzu und Sie können die Datei als RTF-Datei speichern und dann in Wordpad/etc öffnen.

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

Ich schätze deinen Vorschlag hier, aber in meiner Situation muss ich verhindern, dass die Charaktere überhaupt konvertiert werden. Vielleicht ist das nicht möglich? –

+0

@ChrisEmerson Es ist nicht möglich, RTF-Dateien in ASCII zu codieren, die den vollständigen Unicode von UTF-8 nur durch Escape-Sequenzen unterstützen. Der Abschnitt [Zeichencodierung] (https://en.wikipedia.org/wiki/Rich_Text_Format#Character_encoding) im Wikipedia-Artikel erklärt das ziemlich gut. – Kateract

+0

Es sieht bestimmt grimmig aus, aber ich will noch nicht aufgeben. Die Sache, die mich nervt, ist, dass ich den asiatischen Charakter manuell in die reine Textbox einfügen kann, ebenso wie in das rtf-Textfeld, damit ich weiß, dass diese Charaktere an beiden Orten "leben" können. Das Problem scheint der Umwandlungsprozess zu sein. Meine andere Herausforderung besteht darin, den Unterschied zwischen Zeichenketten wie diesem herauszufinden: "\ u20302" und dies: "\ p20 \ a23 \ e44". Wie auch immer - Sie können sehr gut sein, aber ich möchte die Hoffnung ein bisschen länger durchhalten und basteln/forschen etwas mehr. –