0

首先,我有一个数据库,不允许我更改任何内容,因此我必须处理给定的字符集。

这是数据库的字符集:

SELECT * from NLS_DATABASE_PARAMETERS 
 WHERE parameter IN ( 'NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');

NLS_LANGUAGE             GERMAN     
NLS_TERRITORY            GERMANY
NLS_CHARACTERSET         WE8ISO8859P15

当连接到这个数据库(使用 perl)时,我将连接字符集设置为WE8ISO8859P15. 我认为到目前为止我做得对。:)

现在是棘手的部分,它失败了。数据库中的数据需要转换为 utf8,才能在我使用数据的浏览器中正确显示。

据我了解,设置 NLS_LANG 应该为我处理这个问题吗?设置时,它应该将WE8ISO8859P15数据(动态)转换为utf8,对吗?

因此,在 perl 中建立连接之前,我将环境变量设置为

$ENV{'NLS_LANG'} = ".AL32UTF8"

但是没有任何改变,我做错了吗?

手动转换数据时,在 perl 脚本中如下所示:

Encode::from_to($data, 'iso-8859-15', 'utf8');

它的工作如预期。

我真的很感激一些帮助。

谢谢,安迪

4

1 回答 1

0

我不是 perl 专家。但NLS_LANG参数通常需要类似于

NLS_LANG = GERMAN_GERMANY.AL32UTF8

不仅仅是AL32UTF8。是否NLS_LANG设置在您环境中的其他位置?还是 perl 脚本是唯一设置它的东西?

于 2012-08-31T10:59:42.307 回答