4

我正在尝试从 Oracle 9i 数据库中获取特定列的值为“FOO - BAR”的记录。

'FOO - BAR' 条件值存在于表中,但是当我运行查询时,结果没有出现。

在打破我的头一段时间后,发现hypen的大小有所不同。

'FOO – BAR'
'FOO - BAR'

这次我复制(通过 SQLDeveloper)数据库值并将该值粘贴到 Eclipse IDE 中。我没有看到 Eclipse 有任何区别。当我从 IDE 运行查询时,令我惊讶的是它起作用了并且值即将到来。

我将相同的类文件部署到我们的服务器(UX 框),然后再次回到 1 号方块 - 值没有出现。

我尝试将我的 IDE 的文件编码从默认(Cp1252)更改为 UTF-8,现在一切都很好。

有人可以解释发生了什么吗?连字符的大小会因编码而异吗?我们有三种不同的破折号吗?

4

4 回答 4

5

em-dash、en-dash、hyphen 等有很多不同的 Unicode 字符。它们在文本的不同上下文中使用。

您可能需要阅读“Dash”维基百科文章以获取更多信息。请注意,连字符不是完全相同的东西:)

至于编码是如何产生的——这将取决于您如何插入、检索和显示数据。我不会开始使用剪切和粘贴 - 这很可能会尝试找到与数据库中表示的实际数据最接近的可用值。

于 2010-08-10T09:27:13.090 回答
3

我们有三种不同的破折号吗?

是的。事实上,根据你所定义的破折号,连字符和破折号的 Unicode 代码点远不止 3 个。(并且@Jon Skeet 链接到的页面甚至没有列出所有破折号字符。例如,U2500 代码平面中有 4 个“水平破折号”代码点......以及“垂直破折号”和“双破折号” .)

连字符的大小会因编码而异。

这是一个无法回答的问题。连字符的实际大小取决于渲染软件在屏幕或页面上的渲染方式。然而,事实仍然是,在某些字符集中,有不同的代码点在概念上表示不同大小的连字符或破折号。严格来说,这与编码 本身无关。

这里可能发生的是字符在不同点从一个字符集映射到另一个字符集。在某些时候,目标字符集不支持多个连字符/短划线字符,并且映射正在悄悄地将“时髦”连字符转换为“普通”连字符。

剪切和粘贴字符对您没有帮助。您需要一种方法来查看十六进制的实际代码点值。

于 2010-08-10T09:38:45.307 回答
0

尝试从表中选择 rawtohex(col)

  • 我离开了我的 oracle 实例,但我认为这可以从内存中工作,它会给你一个十六进制转储,然后查找代码
于 2010-08-10T10:39:28.690 回答
0

您可以借助ASCII() Oracle 函数发现存储在数据库中的真实代码。例如

select ascii(substr(t.strng_field, 5, 1)) from string_table t

但是处理这种情况的真正功能取决于字符串列的数据库字符集和填充表的数据源。

您可以从字符串中选择类似的字符集翻译功能convertdecompose或在此处unistr列出。

于 2010-08-10T12:52:04.940 回答