6

外部の Microsoft SQL 2008 データベースからデータを受け取ります (MyBatis でクエリを作成します)。データは「Windows-1252」としてエンコードされます。

UTF-8に再エンコードしようとしました:

String textoFormado = ...value from MyBatis... ; 
String s = new String(textoFormado.getBytes("Windows-1252"), "UTF-8");

ほぼすべての文字列が正しくデコードされますが、アクセント付きの一部の文字は正しくデコードされません。

例えば:

  1. 私はこれを受け取りました:Ã�vila
  2. 上記のコードは次のようになります。�?vila
  3. 私は期待しました:Ávila
4

3 に答える 3

1

データベースから適切なエンコーディングで文字列を読み取るという、より低いレベルで問題に取り組んでみませんか。

ほとんどの JDBC接続文字列または URI は、プロパティcharacterEncodingをサポートしています。

したがって、Microsoft SQL Server の場合、たとえばjdbc:sqlserver://localhost:52865;databaseName=myDb?characterEncoding=utf8.

次に、各文字列列は、手動で (再) 変換する必要なく、指定されたエンコーディングで読み取る必要があります。

以下も参照してください。

于 2021-07-14T18:02:15.520 に答える
0

皆様のおかげで解決しました。

私は次のプロジェクト構造を持っています:

  • MyBatisQueries: 文字列を取得する「select」を含むクエリがあります
  • 文字列を保存する Pojo (これにより、文字列に変換の問題が発生しました)
  • クエリとデータを含む Pojo オブジェクトを使用するクラス (デコードが不十分であることがわかりました)

最初に私は持っていました (MyBatisとSpringは依存関係とパラメータを注入します):

public class Pojo {
    private String params;
    public void setParams(String params) {
        try {
            this.params = params;
        }
    }

}

ソリューション:

public class Pojo {
    private String params;
    public void setParams(byte[] params) {
        try {
            this.params = new String(params, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            this.params = null;
        }
    }

}
于 2014-04-21T09:53:33.407 に答える