【发布时间】:2019-03-14 10:49:11
【问题描述】:
我有一个用 uft8 编码的 CSV 文件。记录的某个字段中有文字
在文本中是用两个字符编码的字符。
例如在Österreich这个词中
字符Ö 被编码为O 和¨ 而不是Ö
如果我在编辑器中打开文件,我会看到正确的单词Österreich,
如果我通过选择外部表来查看文件,那么我会看到O¨sterreich。
在创建外部表时,我已经添加了访问参数CHARACTERSET AL32UTF8
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
CHARACTERSET AL32UTF8
STRING SIZES ARE IN BYTES
skip 1
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LDRTRIM
MISSING FIELD VALUES ARE NULL
)
是否有可能或参数告诉oracle将输出中的两个字符合并为一个?
【问题讨论】:
-
根据 Unicode 标准,您应该始终使用尽可能短的代码点,即
Ö(U+00D6) 而不是O¨(U+004F U+0308)。运行SELECT DUMP(..., 1016) FROM ...会得到什么?确保您有字符U+0308 COMBINING DIAERESIS而不是U+00A8 DIAERESIS。很可能您的客户端应用程序没有正确显示它。许多客户端难以显示组合的 Unicode 字符。 -
@WernfriedDomscheit, 查询结果为
Typ=1 Len=11 CharacterSet=WE8MSWIN1252: 4f,a8,73,74,65,72,72,65,69,63,68 -
我怎样才能确保这一点(U + 0308 COMBINING DIAERESIS)?
-
我从
c#应用程序中的外部表中读取数据并生成pdf。只是尝试这样做,文本在O¨sterreich而不是Österreich之前提到。所以这不仅是我客户的一个令人不安的“问题”。我们从客户那里得到了文件。现在这不是一个大问题,客户正在向我们提供不同编码的文件。有趣的是,如果这可以用外部表解决 -
看起来在您的 CSV 文件中确实有
O¨- 实际上是两个不同的单个字符,而不是Ö。您应该以包含正确内容的方式编辑 CSV 文件。
标签: sql oracle utf-8 character-encoding external-tables