Lesen Sie eine Datei mit unicode-Zeichen
Habe ich eine asp.net c# - Seite und versuche zu Lesen, eine Datei, die die folgende charater ' und wandeln Sie um in '. (Aus schrägen Hochkomma, Apostroph).
FileInfo fileinfo = new FileInfo(FileLocation);
string content = File.ReadAllText(fileinfo.FullName);
//strip out bad characters
content = content.Replace("’", "'");
Diese funktioniert nicht und es ändert sich die schrägen Apostrophen ? Mark.
was ist die Frage?
Sie sagte, es verändert die schrägen in "?". Das bedeutet, dass das erste argument Ihrer Funktion Replace ist richtig, aber dann das zweite argument ist falsch. Es ist wahrscheinlich ein Unicode-Zeichen, die aussieht wie ein einziges Zitat, aber tatsächlich nicht ein einziges Zitat. Bei displays ohne eine Unicode-schriftart, oder, wenn es gedruckt auf dem Bildschirm erscheint eine unbekannte Unicode-Zeichen angezeigt, wie "?".
Überprüfen Sie, ob das zweite argument ist das richtige Zeichen. Möglicherweise haben Sie versehentlich gedreht, auf einem asiatischen IME oder so etwas und tippte eine asiatische Anführungszeichen (Unicode), die genauso aussieht, wie ein einfaches Zitat auf den Bildschirm. Es ist manchmal sehr schwer, den Unterschied zu erkennen.
Ja, es ist mit dem Lesen der Datei. Ich verwendet, string Inhalt = Datei.ReadAllText(fileinfo.FullName-Codierung.Standard); Lesen Sie es in richtig. Danke!
Sie sagte, es verändert die schrägen in "?". Das bedeutet, dass das erste argument Ihrer Funktion Replace ist richtig, aber dann das zweite argument ist falsch. Es ist wahrscheinlich ein Unicode-Zeichen, die aussieht wie ein einziges Zitat, aber tatsächlich nicht ein einziges Zitat. Bei displays ohne eine Unicode-schriftart, oder, wenn es gedruckt auf dem Bildschirm erscheint eine unbekannte Unicode-Zeichen angezeigt, wie "?".
Überprüfen Sie, ob das zweite argument ist das richtige Zeichen. Möglicherweise haben Sie versehentlich gedreht, auf einem asiatischen IME oder so etwas und tippte eine asiatische Anführungszeichen (Unicode), die genauso aussieht, wie ein einfaches Zitat auf den Bildschirm. Es ist manchmal sehr schwer, den Unterschied zu erkennen.
Ja, es ist mit dem Lesen der Datei. Ich verwendet, string Inhalt = Datei.ReadAllText(fileinfo.FullName-Codierung.Standard); Lesen Sie es in richtig. Danke!
InformationsquelleAutor chris | 2011-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, dass das problem nicht mit dem Ersatz, sondern eher mit dem Lesen von der Datei selbst. Als ich dies versuchte, die nieve-Weg (mit Word und copy-paste) ich endete mit dem gleichen Ergebnis wie du, allerdings die Prüfung
content
zeigte, dass die .Net framework glauben, dass der Charakter war Unicode-Zeichen65533
, d.h. die "WTF?" - Zeichen vor die Zeichenfolgen ersetzen. Sie können dies überprüfen, sich selbst durch die Untersuchung der relevanten Charakter in der Visual Studio-debugger, wo es sollte zeigen das Charakter-code:Der Grund, warum ersetzen Sie nicht arbeiten ist einfach -
content
enthält nicht den string, den Sie ihm gegeben:Als dafür, warum das Lesen der Datei nicht richtig funktioniert - Sie sind wahrscheinlich mit der falschen Kodierung beim Lesen der Datei. (Wenn keine Codierung angegeben ist, dann das .Net framework versuchen, um zu bestimmen, die richtige Kodierung für Sie, aber es gibt keinen 100% zuverlässigen Weg, dies zu tun und so oft es bekommen kann es falsch). Die genaue Codierung, die Sie benötigen, hängt von der Datei selbst, aber in meinem Fall die Kodierung verwendet wurde Erweiterte ASCII -, und so die Datei zu Lesen, ich musste nur angeben, dass die korrekte Kodierung:
(Siehe diese Frage).
Müssen Sie auch, um sicherzustellen, dass Sie geben das richtige Zeichen in den Ersatz-string, wenn Sie mit "seltsamen" Zeichen im code finden Sie es vielleicht zuverlässigere Zeichen angeben, der durch seine Zeichen-code, nicht als string-literal (das kann Probleme verursachen, wenn die Codierung der source-changes-Datei), zum Beispiel die folgenden arbeitete für mich:
(char)146
,'\u0092'
vielleicht mehr lesbar, da passt der character code charts.Vielen Dank - habe ich aktualisiert meine Antwort.
Der Grund, warum
'\u0092' == (char)146
ist, weil die\u
hexadezimal-notation verwendet, und die0x92 == 146
Danke für den code, Auch für Türkisch iso-8859-9
InformationsquelleAutor Justin
InformationsquelleAutor Trey Carroll
Meine Wette ist, die Datei codiert ist Windows-1252. Dies ist fast das gleiche wie ISO 8859-1. Der Unterschied ist Windows-1252 verwendet "Darstellbare Zeichen eher als control-Zeichen in die 0x80 bis 0x9F-Reihe". (Das ist, wo das schräge Apostroph liegt. also 0x92)
InformationsquelleAutor James Lawruk
Wenn Sie Strings (großgeschrieben) und nicht als string, es sollte in der Lage sein, jede Unicode-Sie werfen es an. Versuchen Sie, die erste und sehen, ob das funktioniert.
Du hast Recht! Dann würde ich annehmen, die Anführungszeichen in der Frage nicht 2018/9 und vielleicht sind abhängig von der locale. Cast in einen int-oder kurz, um den Unicode-Wert, und ersetzen Sie \u+thatNumber mit dem, was weiter oben geschrieben.
InformationsquelleAutor kappasims