1

Windows で Java と PostgreSQL を使用しています。İ、ş、ö、ç などのトルコ語の文字を含む単語がいくつかあります。

Java では、単語を文字列に割り当て、それをデータベースに書き込もうとします。Javaで印刷すると、エンコーディングが正しく表示され、すべての文字が正しく表示されます。ただし、データベースへの書き込み中に、テキストが破損/スクランブルされているように見えます。

次のコマンドでデータベースを作成しました。

CREATE DATABASE dbname ENCODING "UTF-8"

(İ -> \u0130 , ş -> \u015F) のように、トルコ語の文字を ISO-8859-1 エンコーディングに変換して修正しようとしました。

//\u0130leti\u015Fim = İletişim
title = \u0130leti\u015Fim
String mytitle = new String(title.getBytes("ISO-8859-1"), "UTF-8");

そして、mytitleデータベースに書き込もうとしましたが、うまくいきませんでした。

アドバイスありがとうございます。

解決済み : トルコ語の文字をデータベースに書き込むことができることに気付きましたが、問題は応答にありました。応答に書き込む前にこれらの行を追加しました。

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

これを追加した後、動作するようになりました。うまく説明できれば幸いです。

4

3 に答える 3

3

を呼び出すと、文字列内の文字を ISO-8859-1 バイトとして表現できるtitle.getBytes("ISO-8859-1")ことを Java ランタイムに約束することになりますが、これは実際には \u0130 または \u015f には当てはまりません。したがって、すでにバイトへの変換では、トルコ語の文字で指定されていない何かが行われます。おそらく、トルコ語の文字は削除されるだけです。

次に、実際には ISO-8859-1 であるにもかかわらず、取得したバイトを UTF-8 として解釈しようとすると、最初から ASCII ではないすべてのものを完全に混乱させることが保証されます。

(ISO-8859-1 のレプリトアは、一部の XX を \u00XX と書くことができる Unicode 文字と正確に一致しています)。

于 2012-09-18T18:21:20.910 に答える
2

エンコーディングの問題がある場合は、いくつか確認する必要があります。

  • ソース ファイルが期待どおりのエンコーディングであるかどうか。
  • client_encoding設定方法
  • データベースのエンコーディングとは

Java の場合、PgJDBC はclient_encoding常に必要UTF-8であり、別のものに設定すると停止するため、問題にはなりません。データベースも同様であることを示しましたUTF-8。そのため、Java ソースは、Java コンパイラーとランタイムが期待するエンコーディングと同じではない可能性があります。

デフォルトjavacでは、 はソース コードをプラットフォームのデフォルト エンコーディングで解釈します。ソースを別のエンコーディングで保存した場合、奇妙なことが起こります。ソースを次のいずれかで保存します。

  • Windows プラットフォームのデフォルトのエンコーディングで。
  • Unicode ("UTF-16" または "UCS-2") として; また
  • バイト オーダー マーク (BOM)付きの UTF-8 として。多くのプログラムは、UTF-8 の BOM を追加しません。

次に、プログラムを再コンパイルします。それでも問題が解決しない場合は、Java を使用して挿入したデータの ing の出力など、「機能しませんでした」の正確な意味から始めて、詳細をフォローアップする必要があります。SELECTpsql

于 2012-09-19T00:10:57.647 に答える
0

次のようにデータベースを作成する必要があります。

CREATE DATABASE <db name> 
        WITH OWNER <owner user name>
    TEMPLATE template0 
    ENCODING 'UTF-8' 
    LC_COLLATE 'tr_TR.UTF-8' 
    LC_CTYPE = 'tr_TR.UTF-8';
于 2021-07-15T16:08:54.977 に答える