Wie kann ich überprüfen, dass die Marke(™) Charakter richtig eingestellt in meiner Oracle-Datenbank?
Wie kann ich überprüfen, dass die Marke(™) Charakter richtig eingestellt in meiner Oracle-Datenbank?
Ich erwarte, dass Sie gespeichert werden, unter Verwendung der UTF-8-Codierung.
Ich habe einen Wert, gespeichert in einer Salesforce.com Feld, das aussieht wie das von der GUI aus (beachten Sie die Marke Zeichen):
Chuck Norris's Roundhouse Kick™
Ich bin mit Informatica zu vervielfältigen, zu einer Oracle-Datenbank. Meine Datenbank ist den AL32UTF8-Codierung.
, Wie es zeigt sich in SQL Developer
Wenn ich die Abfrage meine Tabelle mit SQL Developer, dem Markenzeichen-symbol zeigt sich als ein Rechteck (schwarzer Rand, weiße Füllung).
, Wie es zeigt sich in HTML
Wenn ich es exportieren von SQL Developer mit dem UTF-8-Codierung in ein HTML-Dokument, und öffnen Sie es in Chrome, das Markenzeichen-symbol nicht angezeigt. Wenn ich es öffnen in IE, es erscheint als Rechteck wieder. In Firefox, es ist ein Rechteck mit 00
in der oberen Hälfte und 99
in der unteren Hälfte. Alle drei Browser interpretieren die HTML-doc mit UTF-8.
, Wie es zeigt sich in text-Editoren
Öffnen der gleichen HTML-doc in Notepad und Notepad++, das Markenzeichen-symbol zeigt sich als ein Rechteck. Wenn ich die Hex-Viewer-plugin für Notepad++ sehe ich die byte-Codierung ist C2 99
. Das scheint die richtige Codierung für das Markenzeichen-symbol in UTF-8.
Beim öffnen von Dokument im MS Schreiben, das trademark-Zeichen sieht wie folgt aus: ™
.
, Wenn ich den Wert programmgesteuert
Python benutzen, wenn ich den Wert aus der Datenbank, die Marken-Zeichen wird durch '\xbf' -- das umgekehrte Fragezeichen, aber , dass Charakter ist ja nicht richtig codiert, soweit ich das sagen kann, weil es fehlt mindestens ein führendes byte (abhängig von der konkreten Kodierung)
>>> import cx_Oracle
>>> con = cx_Oracle.connect('username', 'password', 'db')
>>> cur = con.cursor()
>>> cur.execute('select * from trademark')
<__builtin__.OracleCursor on <cx_Oracle.Connection to username@db>>
>>> records = cur.fetchall()
>>> records[0][0]
"Chuck Norris's Roundhouse Kick\xbf"
Im Idealfall würde ich mag in der Lage sein, die Daten zu validieren gespeichert in meiner Oracle-Datenbank mit allen oben genannten Methoden. Ich würde dich für jemanden, nur überprüfen, dass das, was ich sah in den Hex-Viewer war genug, von einem "test" 😉
InformationsquelleAutor Mike M. Lin | 2011-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Charakter literal ™, den Sie geschrieben ist, nicht U+0099 (control character), aber U+2122 (TRADE-MARK-ZEICHEN).
Den Unicode-spec definiert U+0099 wie folgt:
So, dass Sie nicht einmal einen Namen haben, und ich habe nicht gegangen zu Graben Runde der spec finden Sie heraus, was dieses Zeichen ist.
Dekodierung U+0099 in Windows führt im Ergebnis zu einer Marke grapheme. Ich denke, das ist ein bug.
Die korrekte byte-Reihenfolge für das TRADE-MARK-ZEICHEN (U+2122) in UTF-8 ist
E2 84 A2
.Da U+2122 kodiert als 0x99 in windows-1252, ich würde vermuten, etwas ist mit einer Standard - "ANSI" - Codierung während einige Transcodierung.
InformationsquelleAutor McDowell
Nur für zukünftige Referenz, weil der Autor nicht die Mühe Entsendung ein Update.
Es ist in der Tat ein Informatica problem, was benötigt wird:
InformationsquelleAutor user64204
wenn Sie das speichern dieser Zeichenfolge für die Ausgabe in einem html-doc verwenden:
™
die html-Entität für das Markenzeichen-symbol.wenn Sie mit dieser Zeichenfolge, die für nicht-html-Zwecke Dekodieren der Zeichenkette zur Laufzeit verwenden:
finden Sie unter:
http://www.w3schools.com/html/html_entities.asp
http://fredericiana.com/2010/10/08/decoding-html-entities-to-text-in-python/
InformationsquelleAutor Francis Yaconiello