首页 > 解决方案 > 从数据库加载数据时的德语字符编码问题

问题描述

我正在创建一个将对象转换为的单元测试,JSON但我遇到了一些特殊字符的问题:

String expectedResponse = gson.toJson(callReasonRepository.findAll());

我得到这个:Verfügung而不是Verfügung.

我的项目设置为UTF-8. 知道为什么会这样吗?还有什么我可以提供的吗?

标签: javajsonutf-8character-encodinggson

解决方案


当数据使用UTF_8charset 编码但您使用windows-1252(或ISO-8859-1)读取它们时,会出现此问题。我创建了JSON编码的文件UTF-8

{
  "value": "Verfügung"
}

并将其阅读为Map使用以下代码:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;

public class GsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        Gson gson = new GsonBuilder().create();

        Charset outputEncoding = Charset.forName("windows-1252");

        try (InputStreamReader reader = new InputStreamReader(new FileInputStream(jsonFile), outputEncoding)) {
            Map map = gson.fromJson(reader, Map.class);
            System.out.println(map);
        }

        byte[] bytes = "Verfügung".getBytes(StandardCharsets.UTF_8);
        System.out.println(new String(bytes, outputEncoding));
    }
}

上面的应用程序打印:

{value=Verfügung}
Verfügung

GsonApp文件也被编码为UTF-8.

我想,在您的情况下,您UTF-8使用默认系统字符集读取编码数据,这可能是windows-1252. 您从中加载数据,DB因此您可能需要UTF-8在连接字符串中显式设置编码。请参阅MySQL数据库示例:JDBC 字符编码

也可以看看:


推荐阅读