首页 > 解决方案 > 什么设置了 Java 中的默认字节数组编码?

问题描述

我的团队在服务器上有一些 java ETL 工具。其中一个工具具有以下代码:

        StringBuilder responseContents = new StringBuilder();
        byte[] buffer = new byte[2048];
        int read = 0;
        try
        {
            if (zipInputStream.getNextEntry() != null)
            {
                while ((read = zipInputStream.read(buffer, 0, 2048)) >= 0)
                {
                    responseContents.append(new String(buffer,
                                                       0,
                                                       read,
                                                       StandardCharsets.UTF_8));

                }
            }
        }

zipInputStream 包含以 UTF-8 编码的 JSON。在 java 中,字符串以 UTF-16 编码。最初,StandardCharsets.UTF_8 没有传递给字符串构造函数。我们遇到了 JSON 包含一些韩语字符的情况,并且在我的机器上(没有显式 charsets 参数)正确假设了字节的编码方案,但是当在服务器上运行相同的 jar 可执行文件时,假设不正确并且韩文字符转换不正确。我的机器和服务器都没有设置 NLS_LANG 环境变量,并且两台机器都运行相同的 java 版本。哪些变量会更改 Java 中的“默认/假定”字节数组编码?

标签: javastringencodingutf-8utf-16

解决方案


推荐阅读