【发布时间】:2012-01-06 22:46:26
【问题描述】:
客户要求将一些表提取到 csv 中,都没有问题。他们刚刚要求我们确保文件始终为 UTF 8 格式。
我如何检查实际情况。或者甚至更好地强制它这样做,我可以在运行查询之前在过程中设置它吗?
数据是从 Oracle 10g 数据库中提取的。
我应该检查什么?
谢谢
【问题讨论】:
标签: oracle
客户要求将一些表提取到 csv 中,都没有问题。他们刚刚要求我们确保文件始终为 UTF 8 格式。
我如何检查实际情况。或者甚至更好地强制它这样做,我可以在运行查询之前在过程中设置它吗?
数据是从 Oracle 10g 数据库中提取的。
我应该检查什么?
谢谢
【问题讨论】:
标签: oracle
您究竟是如何生成 CSV 文件的?根据具体的架构,会有不同的答案。
例如,如果您使用 SQL*Plus 提取数据,则需要将客户端计算机上的 NLS_LANG 设置为适当的值(即 AMERICAN_AMERICA.AL32UTF8),以强制将数据发送到UTF-8 格式的客户端计算机。如果您使用其他方法,NLS_LANG 可能重要也可能不重要。
【讨论】:
您需要寻找的是 hte 输入中的 8 位 ascii 字符(如果有)被翻译成双字节 utf-8 字符。
这高度依赖于您的本地 ASCII 代码页,但通常:- ASCII "£" 应该是 ascii 中的 x'A3' 神奇地变成了 utf-8 中的 x'C2A3'。
【讨论】:
好吧,这并不像我最初希望的那么简单。上面的查询返回 AL32UTF8。
我正在使用在数据库上编译的存储过程来循环遍历存储过程中数组中保存的表名列表。
我使用 DBMS_SQL 包构建 SQL 并使用 UTL_FILE.PUT_NCHAR 将数据插入文本文件。
我相信我的结果输出将是 UTF 8,但是在 Textpad 中打开说它是 ANSI 并且数据在某些地方是乱码:)
干杯
NLS_CHARACTERSET 是 AL32UTF8 而 NLS_NCHAR_CHARACTERSET 是 AL16UTF16 可能很重要
【讨论】: