5

utf-8 エンコーディングに問題があります。

私はJavaでUTF-8(多くの中国語記号を含む)でフォーマットされたMySQLデータベースデータから取得し、それらをいくつかのtxtファイルに入れます:(これは一例です..私はたくさんのデータを持っています)

String name = null;
ResultSet res = stat.executeQuery("Some_SQL");
nomeImg = res.getString("value");

PrintWriter = new new PrintWriter(new FileOutputStream("file_name.txt"));
out.println(name);

これらのtxtファイルを使用して、Androidアプリにいくつかのアクティビティを設定するために使用するTextViewを作成しますが、すべてのシンボルが正しく表示されるわけではありません:それらのほとんどは正しいですが、一部は認識されず、黒で表示されます中に白いクエスチョンマークが入ったひし形。

私もこれを試しました:しかし、私は最悪の結果を得ました

byte[] name = null;
ResultSet res = stat.executeQuery("Some_SQL");
nomeImg = res.getString("value").getBytes("UTF-8"):

BufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file_name.txt"), "UTF-8"));
out.write(new String(name, "UTF-8")+"\n");

誰にもアイデアはありますか?ありがとう!

編集 私は自分のDBに接続します:

Connection con = DriverManager.getConnection("jdbc:mysql://url:port?useUnicode=true&characterEncoding=utf-8", user, pass);

DBでクエリを実行すると:

SELECT default_character_set_name 
FROM information_schema.SCHEMATA S 
WHERE schema_name = "schema_name";

私は結果を得る

utf8

DBはUTF-8でエンコードされており、DBへの接続はUTF-8を処理できると思います

4

4 に答える 4

11

これが発生するフェーズを把握する必要があります。1-データベースからテキストをロードする場所、および2-ファイルにテキストを書き出す場所。

注意すべき点の1つは、データベースはUTF-8エンコーディングで作成する必要があり、接続もそれをサポートする必要があるということです。UTF-8をサポートするJDBC接続URLの例は次のとおりです。

jdbc:mysql://hostname:port/schema?useUnicode=yes&characterEncoding=utf-8

getBytes( "UTF-8")でエンコードを指定した後に観察される症状は、データベースから取得したものがUTF-8にないことを明確に示しています。

また、データが含まれていると思われるエンコーディング(ISO-8859-1など)から変換してみてください。

new String(request.getParameter("value").getBytes("ISO-8859-1"), "UTF-8");
于 2013-02-04T12:19:06.130 に答える
1

@houman001 そうですね。その 2 つの手順の間は注意が必要です。

更に:

数日前にアラビア語のテキストで同じ問題が発生しました。しかし、今私はそれを解決しました。UTF-8エンコーディングでデータベースに書き込むようにすることで解決しました。また、フォント開発者から提供されたアラビア語フォントも使用しています。その結果、私が望むようにアラビア語のテキストが表示されます。

そのため、データを解析して別のデータに転送する際には注意し、UTF-8 エンコーディング形式であることを確認してください。

このことがあなたに役立つことを願っています。

于 2013-02-04T12:27:16.410 に答える
1

データベースへの接続のために、これをすべての UTF-8 に使用しましたが、うまく機能します

これは、ユーザー名、パスワード、およびデータベース名に関する情報を編集するだけで使用できるクラスです。

String unicode = "?useUnicode=yes&characterEncoding=UTF-8";
    String driverName = "com.mysql.jdbc.Driver";
    String hostName = "localhost";
    String port = "3306";
    String databaseName = "yourDatabaseName";

String userName = "yourusername";
    String password = "yourpassword";
    String databaseType = "jdbc:mysql";
    public Connection con;

    public Database() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = (Connection) DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/yourdatabasename" + unicode,
                    "yourusername", "yourpassword");
        } catch (ClassNotFoundException e) {
            System.err
                    .println("exception Class (" + driverName + ") not found");
            e.printStackTrace();
        } catch (SQLException e) {
            System.err.println("exception Connection URL");
            e.printStackTrace();
        }
    }

サーバーからアンドロイドにデータを送信したい場合は、これを試してください

ServletOutputStream out = response.getOutputStream();
out.println(URLEncoder.encode(yourString,"UTF-8"));

Android(またはデータの受信者)でこれを試してください

String dd = URLDecoder.decode(yourReturnedData, "UTF-8");

編集

あなたのコードのために、これを追加することができます

name = URLDecoder.decode(name, "UTF-8");
于 2013-02-04T12:55:09.700 に答える