Oracle服务器编码和文件编码

时间:2016-08-29 07:14:09

标签: oracle encoding

我有一个 Oracle服务器DAD定义为PlsqlNLSLanguage DANISH_DENMARK.WE8ISO8859P1.

我还有一个在浏览器中加载的JavaScript文件。 JavaScript文件包含丹麦字母æøå。当 js文件保存为UTF8时,丹麦语字母会被错误编码。当我将 js文件保存为UTF8-BOMANSI时,字母会正确显示。

我不确定是什么问题。

1 个答案:

答案 0 :(得分:0)

尝试设置你的DAD

PlsqlNLSLanguage DANISH_DENMARK.UTF8

甚至更好

PlsqlNLSLanguage DANISH_DENMARK.AL32UTF8

当您将文件保存为ANSI时,它通常表示西方Windows上的“Windows代码页1252”,请参阅National Language Support (NLS) API Reference处的“ANSI代码页”列。 CP1252与ISO-8859-1非常相似,请参阅ISO 8859-1 vs. Windows-1252(它是德语维基百科,但该表显示的差异远远超过英语维基百科)。因此,对于100%正确的设置,您必须设置PlsqlNLSLanguage DANISH_DENMARK.WE8MSWIN1252

现在,为什么在将文件保存为UTF8-BOM时会出现正确的字符,尽管与.WE8ISO8859P1不匹配?

当浏览器打开文件时,它会首先读取BOM 0xEF,0xBB,0xBF假定编码为UTF-8的文件。但是,在某些情况下,这可能会失败,例如,当您将input字段中的文本插入数据库时​​。

使用PlsqlNLSLanguage DANISH_DENMARK.AL32UTF8告诉Oracle数据库:“Web服务器使用UTF-8。”不多也不少(就字符集编码而言)。因此,当您的数据库使用字符集WE8ISO8859P1时,Oracle驱动程序知道他必须将来自数据库的ISO-8859-1字符转换为浏览器的UTF-8,反之亦然。