Как я могу проверить, что символ торговой марки (™) установлен правильно в моей базе данных Oracle? - PullRequest
2 голосов
/ 08 сентября 2011

Как я могу проверить, что символ торговой марки (™) установлен правильно в моей базе данных Oracle?

Я ожидаю, что он будет сохранен с использованием кодировки UTF-8.

У меня есть значениехранится в поле Salesforce.com, которое выглядит так из графического интерфейса пользователя (обратите внимание на символ торговой марки):

Chuck Norris's Roundhouse Kick™

Я использую Informatica для репликации его в базу данных Oracle.Моя база данных настроена на использование кодировки AL32UTF8.

Как это отображается в SQL Developer

Когда я запрашиваю свою таблицу с помощью SQL Developer, символ торговой марки отображается как прямоугольник (черная рамка, белая заливка).

Как это отображается в HTML

Когда я экспортирую его из SQL Developer, используя кодировку UTF-8, в документ HTML и открою его вChrome, символ торговой марки не появляется вообще.Когда я открываю его в IE, он снова выглядит как прямоугольник.В Firefox это прямоугольник с 00 в верхней половине и 99 в нижней половине.Все три браузера интерпретируют HTML-документ, используя UTF-8.

Как это отображается в текстовых редакторах

При открытии одного и того же HTML-документа в Notepad и Notepad ++ символ торговой марки отображается в виде прямоугольника.Если я использую плагин Hex Viewer для Notepad ++, я вижу кодировку байтов C2 99.Кажется, это правильная кодировка для символа торговой марки в UTF-8 .

Когда я открываю документ в MS Write, символ торговой марки выглядит так: ™.

Когда я получаю значение программно

Используя Python, когда я получаю значение из базы данных, символ товарного знака заменяется на '\ xbf' - перевернутый знак вопроса ,но этот символ даже не правильно закодирован, насколько я могу судить, поскольку в нем отсутствует хотя бы один начальный байт (в зависимости от конкретной кодировки)

>>> 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"

В идеале, я хотел бычтобы иметь возможность проверить данные, хранящиеся в моей базе данных Oracle, используя все вышеперечисленные методы.Я бы согласился на то, что кто-то просто подтвердит, что то, что я увидел в Hex Viewer, было достаточно «тестом»;)

Ответы [ 3 ]

6 голосов
/ 08 сентября 2011

Публикуемый вами литерал символа ™ - это не U + 0099 (управляющий символ), а U + 2122 (ЗНАК ТОРГОВЛИ).

Спецификация Unicode определяет U + 0099 следующим образом:

0099;<control>;Cc;0;BN;;;;;N;;;;;

Итак, у него даже нет названия, и я не стал копаться в спецификации, чтобы выяснить, для чего этот персонаж.

Декодирование U + 0099 в Windows приводит к графеме торговой марки. Я думаю, это ошибка.

Правильная последовательность байтов для ЗНАКА ТОРГОВЛИ (U + 2122) в UTF-8 равна E2 84 A2.

2 голосов
/ 27 августа 2015

Просто для дальнейшего использования, потому что автор не потрудился опубликовать исправление.Это действительно проблема Informatica, что необходимо:

  1. Измените свойства соединения в odbc.ini в окне Informatica, добавьте «IANAAppCodePage = 106» к соединениям, которым требуется UTF8.Свойства соединения в самом Informatica для соединения и добавьте «Codepage = Utf-8» в «Диспетчер соединений -> Соединения -> Реляционный -> -> Редактировать»
0 голосов
/ 08 сентября 2011

, если вы сохраняете эту строку для вывода в html-документе, используйте: &trade; html-сущность для символа товарного знака.

, если вы используете эту строку для не html-целей, декодируйте строку во время выполнения:

import HTMLParser
h = HTMLParser.HTMLParser()
s = h.unescape('&trade;')

см .: http://www.w3schools.com/html/html_entities.asp http://fredericiana.com/2010/10/08/decoding-html-entities-to-text-in-python/

...