java - 从数据库加载数据时的德语字符编码问题
问题描述
我正在创建一个将对象转换为的单元测试,JSON
但我遇到了一些特殊字符的问题:
String expectedResponse = gson.toJson(callReasonRepository.findAll());
我得到这个:Verfügung
而不是Verfügung
.
我的项目设置为UTF-8
. 知道为什么会这样吗?还有什么我可以提供的吗?
解决方案
当数据使用UTF_8
charset 编码但您使用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 字符编码。
也可以看看:
推荐阅读
- javascript - 模糊时验证输入。希望点击下拉菜单不会触发模糊,因为验证不起作用
- node.js - Mongo DB 驱动程序“找不到模块 'bson'。” 并且没有智能感知
- ios - 清理画布时拖放新的 UILables 时出现错误,如何解决?
- haskell - 将位置、值元组列表转换为单个列表
- java - 不允许模拟最终对象
- mysql - MYSQL 计算两种不同条件下的行数,如果计数相等,则返回值作为输出
- c++ - 对于写入二进制文件的接口,应该将 void*/std::size_t 函数参数对更改为什么?
- php - 在 WooCommerce 购物车和结帐表中显示产品自定义字段值
- php - Laravel Nova - 如何从 HasMany 字段中隐藏“创建”按钮?
- python - 如何遍历字符串中的所有字符,然后检查是否有任何字符包含小写、大写、数字和标点符号并返回 True