我在字符编码方面遇到了严重问题。提供一些背景:
- 我有土耳其业务用户,他们在 Unix 屏幕上用土耳其语输入一些数据。
- 我的数据库 NLS 参数设置为
AMERICAN
,WE8ISO8859P1
而 Unix设置NLS_LANG
为AMERICAN_AMERICA.WE8ISO8859P1
. - 土耳其业务能够在 UNIX 屏幕和 TOAD 上看到所有土耳其语字符,而我不能。我只能在西欧字符集中看到它们。
在业务端:ÖZER İNŞAAT TAAHHÜT VE
在我们端:ÖZER ÝNÞAAT TAAHHÜT VE
如果您注意到土耳其字符İ
并Ş
正在转换为 ISO 8859-1 字符集。但是,所有设置(db 和 unix 中的 NLS 参数)在两端都相同ISO8859-1
- (西欧)
通过一些研究,我可以理解 - 土耳其机器可以通过实时转换来显示土耳其数据(数据库 NLS 设置被本地 NLS 设置覆盖)。
现在,我有一个在我的数据库中运行的接口——有一些 PL/SQL 脚本(通过 shell 脚本运行)从数据库中提取一些数据并将它们假脱机到一个 unix 路径上的 .csv 文件。然后该 .csv 文件通过 MFT(托管文件传输)传输到外部系统。
问题是-Exract 从不包含任何土耳其字符。每个土耳其字符都被转换为西欧字符集,并像这样进入外部系统,这被视为数据转换/丢失的情况,我的业务真的很不开心。
谁能告诉我 - 我怎么能保留所有的土耳其字符?
PS:外部系统的字符集可以设置为 ISP8859-9 字符集。
提前谢谢了。