连字符和短划线的奇怪案例

时间:2010-08-10 09:24:26

标签: java sql encoding hyphen

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

“FOO - BAR”条件值存在于表中,但是当我运行查询时,结果不会出现。

在打破了我的脑袋一段时间之后,发现洋打的大小有所不同。

'FOO – BAR'
'FOO - BAR'

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

我将相同的类文件部署到我们的服务器(UX框),然后又回到第1个方块 - 值不会到来。

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

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

4 个答案:

答案 0 :(得分:5)

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

您可能需要阅读"Dash" wikipedia article以获取更多信息。请注意,hyphen并不完全相同:)

至于编码是如何形成的 - 它取决于你如何插入,检索然后显示数据。我不会开始使用剪切和粘贴 - 这可能会尝试找到与数据库中表示的实际数据最接近的可用值。

答案 1 :(得分:3)

  

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

是。实际上,根据您计算的短划线,连字符和破折号有多于3个Unicode代码点。 (并且@Jon Skeet链接到的页面甚至没有列出所有短划线字符。例如,在U2500代码平面中有4个“水平划线”代码点...以及“垂直破折号”和“双破折号” 。)

  

连字符的大小是否随编码而变化。

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

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

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

答案 2 :(得分:0)

试 从表格中选择rawtohex(col)

  • 我离开了我的oracle实例,但我觉得这可以从内存中解决 它为您提供了十六进制转储,然后查找代码

答案 3 :(得分:0)

您可以借助 ASCII() Oracle功能发现存储在数据库中的实际代码。 E.g。

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

但处理此类情况的实际功能取决于字符串列的数据库字符集和填充表的数据源。

您可以选择字符串字符集翻译功能,例如列出hereconvertdecomposeunistr