如何检查我的Oracle数据库中是否正确设置了trademark(™)字符?

Mik*_*Lin 2 unicode utf-8 character-encoding

如何检查我的Oracle数据库中是否正确设置了trademark(™)字符?

我希望它使用UTF-8编码存储.

我有一个存储在Salesforce.com字段中的值,从GUI看起来像这样(注意商标字符):

Chuck Norris's Roundhouse Kick™
Run Code Online (Sandbox Code Playgroud)

我正在使用Informatica将其复制到Oracle数据库.我的数据库设置为使用AL32UTF8编码.

它是如何在SQL Developer中显示的

当我使用SQL Developer查询我的表时,商标符号显示为矩形(黑色边框,白色填充).

它是如何在HTML中显示的

当我使用UTF-8编码将其从SQL Developer导出到HTML文档中并在Chrome中打开时,商标符号根本不会出现.当我在IE中打开它时,它再次显示为矩形.在Firefox中,它是一个00上半部分和99下半部分的矩形.所有三个浏览器都使用UTF-8解释HTML文档.

它如何在文本编辑器中显示

在记事本和Notepad ++中打开相同的HTML文档,商标符号显示为矩形.如果我使用Notepad ++的Hex Viewer插件,我会看到字节编码是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"
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够使用上述所有方法验证存储在Oracle数据库中的数据.我会满足于那些只是验证我在Hex Viewer中看到的内容足够"测试"的人;)

McD*_*ell 6

您发布的字符文字™不是U + 0099(控制字符),而是U + 2122(商标标志).

Unicode规范定义 U + 0099如下:

0099;<control>;Cc;0;BN;;;;;N;;;;;
Run Code Online (Sandbox Code Playgroud)

因此,它甚至没有名称,我没有去挖掘规范以找出这个角色的用途.

在Windows中解码U + 0099确实会产生商标字形.我猜这是一个错误.

UTF-8中TRADE MARK SIGN(U + 2122)的正确字节序列是E2 84 A2.