Java 错误地存储了西类牙语字符

标签 java mysql

我有一个 Java 应用程序正在加载一个 csv 文件,其中包含一些我需要导入到 MySQL 数据库中的内容。

问题是,对于某些西类牙语内容(例如 ñ 或 á é í ó ú),应用会返回:EL ESPA�OL

数据库默认集合是latin1 - 默认集合我也尝试将其更改为其他内容,例如utf8,但结果始终相同。

我导入文件的方式是:

BufferedReader br = new BufferedReader(
                    new InputStreamReader(new FileInputStream(file)));
            System.out.println("*** Importing file **** " + file);
            try {
                String line;
                int i = 0;
                while ((line = br.readLine()) != null) {
                    final String[] parts = line.split(",");
                    if(parts != null && parts.length > 0 && !parts[0].equalsIgnoreCase("")){
                        System.out.println("Line: " + i++ + " Text: " + line);
...
...

当我向后端发出请求时,我发送了以下 header :

accept: application/json
accept-encoding: gzip, deflate, br
accept-language: es-419,es;q=0.9,en;q=0.8
content-type: application/json

最佳答案

要尝试的事情:

重新创建/修改您的表格排序规则

默认排序规则就是默认排序规则。除非您指定排序规则,否则您的新表将采用当前默认值。

如果您不重新创建或修改现有表,它们将保持采用 latin1 编码。

检查您的 JRE 代码页

您在 Windows 上运行吗?您的 JRE 默认代码页设置为多少?

自从我接触 Java 以来已经有一段时间了,但我曾经在多字节字符方面遇到了严重的麻烦,因为我会在 Linux 上开发,并将代码转移到 Windows 上,然后......突然间,时髦的字符无处不在。

这可能在某些时候发生了变化,但在 Linux 和 OSX 上,JRE 以默认编码 UTF-8 开始。在 Windows 上,它使用系统代码页。对我来说是 cp1252 - 绝对不是国际的。

尝试将此系统属性打印到控制台,看看您是否遇到这种情况。

System.getProperty("file.encoding")

您可以像往常一样在启动时使用 -D 参数更改此值,例如

java -Dfile.encoding="UTF-8" -jar myJar.jar

...或者,正如 @ControlAltDel 所说,当您在流 API 中有选项时,请始终指定编码。

关于Java 错误地存储了西类牙语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60638101/

相关文章:

java - 为 Rx v2 Flowable 编写同步单元测试

mysql - Rails 4应用程序中多个数据库之间的切换

mysql - 从表中获取同一列中具有两个变量的所有行

php - MySQL 授予所有权限不允许在 Google CloudSQL 上创建用户

mysql - 通过 Entity Framework 获取 MYSQL UTC_TIMESTAMP

mysql - Apache 的 htdocs 文件夹发生了什么变化?

java - spring方法验证中如何验证方法参数默认为NotNull?

java - LiquiBase 和 Spring boot - 缺少序列

java - 将数据从 netbeans 中的另一个表单添加到 JTable

java - 我将通过使用友元操作检索friendMemberList,但我总是有列表的最后一个成员?