Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入数据库时的土耳其语字符(postgresql)_Java_Postgresql_Utf 8_Character Encoding_Turkish - Fatal编程技术网

Java 写入数据库时的土耳其语字符(postgresql)

Java 写入数据库时的土耳其语字符(postgresql),java,postgresql,utf-8,character-encoding,turkish,Java,Postgresql,Utf 8,Character Encoding,Turkish,我正在Windows上使用Java和PostgreSQL。我有一些单词包括土耳其语字符,如İ、ş、ö、ç等 在Java中,我将单词分配给字符串,并尝试将其写入数据库。当我在java上打印它时,它的编码显示正确,所有字符显示正确。然而,在将其写入数据库时,文本似乎被弄乱了 我使用以下命令创建了数据库: CREATE DATABASE dbname ENCODING "UTF-8" 我试图通过将土耳其语字符转换为ISO-8859-1编码来修复它,如(İ->\u0130,ş->\u015F) 然后我

我正在Windows上使用Java和PostgreSQL。我有一些单词包括土耳其语字符,如İ、ş、ö、ç等

在Java中,我将单词分配给字符串,并尝试将其写入数据库。当我在java上打印它时,它的编码显示正确,所有字符显示正确。然而,在将其写入数据库时,文本似乎被弄乱了

我使用以下命令创建了数据库:

CREATE DATABASE dbname ENCODING "UTF-8"
我试图通过将土耳其语字符转换为ISO-8859-1编码来修复它,如(İ->\u0130,ş->\u015F)

然后我尝试将
mytitle
写入数据库,但没有成功

谢谢你的建议

解决:我意识到它可以将土耳其语字符写入数据库,但问题出在响应上。我在写回复之前添加了这些行

String contentType= "text/html;charset=UTF-8";   
response.setContentType(contentType);
response.setCharacterEncoding("utf-8");

添加此项后,它现在可以工作了。我希望,我可以清楚地解释。

当您调用
title.getBytes(“ISO-8859-1”)
时,您向Java运行时承诺字符串中的字符可以表示为ISO-8859-1字节,这对于\u0130或\u015f都不是真的。 因此,到字节的转换将对土耳其语字符执行一些未指定的操作——可能它们将被删除

接下来,尝试将从中得到的任何字节解释为UTF-8,即使它们实际上是ISO-8859-1,也会保证将所有原本不是ASCII的内容都弄得一团糟


(ISO-8859-1的复述恰好与某些XX可以写为\u00XX的Unicode字符完全一致)。

当您调用
title.getBytes(“ISO-8859-1”)
时,您向Java运行时承诺字符串中的字符可以表示为ISO-8859-1字节,这对于\u0130或\u015f实际上都不是真的。 因此,到字节的转换将对土耳其语字符执行一些未指定的操作——可能它们将被删除

接下来,尝试将从中得到的任何字节解释为UTF-8,即使它们实际上是ISO-8859-1,也会保证将所有原本不是ASCII的内容都弄得一团糟


(ISO-8859-1的repretoire恰好与某些XX可以写为\u00XX的Unicode字符完全一致)。

关于编码问题,您需要检查以下几点:

  • 无论源文件是否采用您期望的编码方式
  • 如何设置客户机编码
  • 数据库编码是什么
在Java的情况下,PgJDBC要求
client_encoding
始终为
UTF-8
,如果您将其设置为其他内容,则会阻塞,因此这不是问题所在。您已经展示了您的数据库也是
UTF-8
。因此,您的Java源代码可能与Java编译器和运行时期望的编码不同

默认情况下。如果您以不同的编码保存了源代码,就会发生奇怪的事情。保存您的源:

  • 在Windows平台的默认编码中
  • 作为Unicode(“UTF-16”或“UCS-2”);或
  • 与带字节顺序标记(BOM)的UTF-8相同。许多程序不为UTF-8添加BOM

然后重新编译你的程序。如果这没有帮助,您需要进一步了解更多细节,从“它不起作用”的确切含义开始,
SELECT
的输出使用
psql
插入Java的数据,等等。

关于编码问题,您有几件事要检查:

  • 无论源文件是否采用您期望的编码方式
  • 如何设置客户机编码
  • 数据库编码是什么
在Java的情况下,PgJDBC要求
client_encoding
始终为
UTF-8
,如果您将其设置为其他内容,则会阻塞,因此这不是问题所在。您已经展示了您的数据库也是
UTF-8
。因此,您的Java源代码可能与Java编译器和运行时期望的编码不同

默认情况下。如果您以不同的编码保存了源代码,就会发生奇怪的事情。保存您的源:

  • 在Windows平台的默认编码中
  • 作为Unicode(“UTF-16”或“UCS-2”);或
  • 与带字节顺序标记(BOM)的UTF-8相同。许多程序不为UTF-8添加BOM

然后重新编译你的程序。如果这没有帮助,您需要进一步了解更多细节,从“它不起作用”的确切含义开始,
SELECT
的输出使用
psql
插入Java的数据,等等。

您的Java源文件是否保存为UTF-8?此外,ISO-8859-1不是像
İ
->
\u0130
ş
->
\u015F
。它们保存为UTF-8。连接是什么?您的Java源文件是否保存为UTF-8?此外,ISO-8859-1不是像
İ
->
\u0130
ş
->
\u015F
。它们被保存为UTF-8。连接是什么?当我将其保存在UTF-16或UCS-2中时,它会给出错误。我也尝试用UTF-8保存它,但是没有任何变化,它仍然不能写入数据库土耳其字符。此外,我还在Ubuntu上试过,但没有改变。@sinan“它会出错”。到底是什么错误?更新您的问题。当我将其保存在UTF-16或UCS-2中时,它会给出错误。我也试着用UTF-8和BOM表来保存它,但没有改变,它仍然不能写入数据库中的土耳其字符。此外,我还在Ubuntu上试过,但没有改变。@sinan“它会出错”。到底是什么错误?更新您的问题。我将代码更改为:title=“İletişim”;mytitle=新字符串(title.getBytes(),“UTF-8”);我也在ubuntu上试过,但它仍然不能正确地将土耳其语字符写入数据库。但你们到底在尝试什么呢
String contentType= "text/html;charset=UTF-8";   
response.setContentType(contentType);
response.setCharacterEncoding("utf-8");