甲骨文+;插入时的java编码问题

甲骨文+;插入时的java编码问题,java,oracle,encoding,Java,Oracle,Encoding,我有点被这件事缠住了。我不是java或oracle专家,请给出详细答案:) 我有一个web服务,可以在DB中插入一些东西。web服务托管在axis上。数据库是oracle,具有以下属性: NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CHARACTERSET ZHS16GBK 该web服务托管在windows server 2008(英文版)上,但我已将系统的区域设置更改为中文 现在插入后的数据存在编码问题,并显示奇怪的字符,如

我有点被这件事缠住了。我不是java或oracle专家,请给出详细答案:)

我有一个web服务,可以在DB中插入一些东西。web服务托管在axis上。数据库是oracle,具有以下属性:

NLS_LANGUAGE    AMERICAN
NLS_TERRITORY   AMERICA
NLS_CHARACTERSET    ZHS16GBK
该web服务托管在windows server 2008(英文版)上,但我已将系统的区域设置更改为中文

现在插入后的数据存在编码问题,并显示奇怪的字符,如??,exxk

jws文件具有GBK编码。插入数据库的数据在文件中硬编码[我们不是从请求中读取它]

[编辑] 有一件事,将整个数据库更改为utf-8是不可行的,因为它有大量的表和数据

[进一步编辑]使事情更清楚

机器从两个来源接收数据。基本上,它被用来向我们订阅的用户发送和接收sms/mms。它主要与GSM操作员控制中心一起运行,所有编码都以GBK进行处理。另一方面,机器还接受来自网站的请求,向用户发送sms/mms。这里的编码是用UTF-8处理的。如果网站想要向用户发送短信,它将调用这台机器上的web服务,将数据插入数据库[我们的问题就在这里]。然后,windows服务会不断检查数据库,如果发现任何发送sms/mms的新请求,它将发送sms/mms并删除记录


在这台旧机器上一切正常,因为它有中文版的Windows2003。我们升级到新服务器,并在其上安装了windows 2008 server英文版。现在,web服务插入数据库后,数据被扭曲。

将字符集设置为UTF8。

将字符集设置为UTF8。

我还建议选择UTF8作为数据库字符集

但是要小心,因为默认情况下java使用UTF16编码。 要设置java使用的默认编码,请使用“file.encoding”标志:

java-Dfile.encoding=UTF8

我从未听说过ZHS16GBK字符集,但它似乎不受java支持:


我还建议选择UTF8作为数据库字符集

但是要小心,因为默认情况下java使用UTF16编码。 要设置java使用的默认编码,请使用“file.encoding”标志:

java-Dfile.encoding=UTF8

我从未听说过ZHS16GBK字符集,但它似乎不受java支持:


@arnaud-Java始终使用UTF-16字符串,并设置
文件。编码
(不应该这样做)不会改变这一点;I/O的默认转码编码取决于平台。ZHS16GBK是简体中文,受Java支持。使用UTF-8是我同意的。@McDowell-好吧,如果您想正确地从文件、套接字等读取/写入UTF-8,这是最简单的方法。出于好奇,为什么会不好呢。。。是的,好吧,除非你想同时处理多种类型的编码,这在。。。那么为什么ZHS16GBK没有出现在支持的编码列表中?@arnaud-RE
file.encoding
:J2SE平台规范不需要“file.encoding”属性;这是Sun实现的内部细节,不应该由用户代码检查或修改。它也是只读的;技术上不可能在命令行上或在程序执行期间的任何其他时间支持将此属性设置为任意值。你能做到;您可能会很幸运。@arnaud-RE ZHS16GBK:这是Java中的“GBK”。但是,JDBC驱动程序应该负责代码转换操作;我怀疑原始海报的问题存在于其他地方-可能是试图存储GBK不支持的代码点-没有足够的信息来说明。嗯。。很抱歉以后再回复。。我不在办公室。首先,我们的数据库中有大量数据,将所有数据转换为UTF-8似乎不是一个可行的选择。问题是这样的。我们将查询插入到t1(col1,col2)值(“abcd”你好“[col2有中文字符]。现在这些字符被硬编码到java代码中。为什么我们仍然有这个问题?@arnaud-java总是使用UTF-16字符串和设置
文件。编码
(这是永远不应该做的)不会改变这一点;I/O的默认转码编码依赖于平台。ZHS16GBK是简体中文,受Java支持。使用UTF-8是我同意的。@McDowell-好吧,如果你想从文件、套接字等正确读/写UTF-8,这是最简单的方法。出于好奇,为什么这会很糟糕吗?…是的,好吧,除非你想同时处理多种类型的编码,这是一件痛苦的事情……为什么ZHS16GBK没有出现在支持的编码列表中呢?@arnaud-RE
file.encoding
:file.encoding"属性不是J2SE平台规范所要求的;它是Sun实现的内部详细信息,不应由用户代码检查或修改。它也是只读的;在技术上不可能支持在命令行上或在程序执行期间的任何其他时间将此属性设置为任意值你能做到,你可能会很幸运。@arnaud-RE ZHS16GBK:这是“GBK”在Java中。但是,JDBC驱动程序应该负责代码转换操作;我怀疑原始poster的问题存在于其他地方-可能是试图存储GBK不支持的代码点-没有足够的信息来说明。嗯..很抱歉稍后的答复..我不在办公室。首先,我们在ou中有很多数据r DB并将其全部转换为UTF-8似乎不是一个可行的选择。问题是这样的。我们在t1(col1,col2)值(“abcd”)中插入了一个查询你好”[col2有中文字符]。现在这些字符被硬编码到j中