Oracle WE8ISO8859P15字符集在perl脚本中转​​换为utf8

时间:2012-08-31 07:42:22

标签: perl oracle utf-8 character-encoding

至少,我有一个数据库,我不允许更改任何内容,所以我必须处理给定的字符集。

这是数据库的字符集:

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');

它的作用与预期的一样。

我真的很感激一些帮助。

谢谢, 安迪

1 个答案:

答案 0 :(得分:0)

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

NLS_LANG = GERMAN_GERMANY.AL32UTF8

不仅仅是AL32UTF8NLS_LANG是否设置在您环境中的其他位置?或者perl脚本是唯一设置它的东西吗?