如何在我的Oracle数据库中检查商标(™)字符的设置是否正确?
我预计它将使用UTF-8编码存储。
我有一个存储在Salesforce.com字段中的值,该字段与GUI类似(注意商标字符):
Chuck Norris's Roundhouse Kick™我使用Informatica将其复制到Oracle数据库中。我的数据库被设置为使用AL32UTF8编码。
它是如何在SQL Developer中出现的
当我使用查询我的表时,商标符号显示为一个矩形(黑色边框,白色填充)。
它如何在HTML中出现
当我使用UTF-8编码将它从SQL Developer导出到HTML文档并以Chrome打开它时,商标符号根本不会出现。当我在IE中打开它时,它再次显示为一个矩形。在火狐中,它是一个矩形,上半部分是00,下半部分是99。所有三个浏览器都使用UTF-8解释HTML文档。
它如何出现在文本编辑器中
在记事本和Notepad++中打开相同的HTML,商标符号显示为矩形。如果我为Notepad++使用十六进制查看器插件,我会看到字节编码是C2 99。那似乎是UTF-8中商标符号的正确编码。
当我在MS中打开文档时,商标字符看起来如下:™。
当我以编程方式获得值时
使用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数据库中的数据。我只想找个人来验证一下,我在十六进制浏览器上看到的东西已经够“测试”了;)
发布于 2011-09-07 22:51:56
您发布的字符文字标记( U+0099 )不是U+2122 (控制字符),而是U+2122(商标符号)。
Unicode规范定义 U+0099如下所示:
0099;<control>;Cc;0;BN;;;;;N;;;;;因此,它甚至没有一个名字,我也没有去深入的规格,以了解这个字符是为了什么。
在Windows中解码U+0099确实会产生商标字形。我想这是个窃听器。
UTF-8中商标符号(U+2122)的正确字节序列是E2 84 A2.
发布于 2015-08-27 16:16:24
只是为了将来的任何参考,因为作者没有费心地发布补丁。这确实是一个信息问题,需要的是:
发布于 2011-09-07 22:44:11
如果要在html文档中保存此字符串以输出,请使用:™ (商标符号的html实体)。
如果将此字符串用于非html目的,则在运行时对该字符串进行解码,请使用:
import HTMLParser
h = HTMLParser.HTMLParser()
s = h.unescape('™')见:entities.asp http://fredericiana.com/2010/10/08/decoding-html-entities-to-text-in-python/
https://stackoverflow.com/questions/7341274
复制相似问题