You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Java中如何将文本从ISO-8859-1编码转换为UTF-8编码?

Java ISO-8859-1 编码转 UTF-8 实现方案

核心逻辑

ISO-8859-1 是单字节编码,覆盖的字符对应 Unicode 码表的前256位,需求中提到的字符Á在两个编码体系下的 Unicode 码点完全一致(均为 U+00C1),仅底层字节存储规则不同,无需手动调整 Unicode 值,只要按规则完成「解码-编码」流程即可保证字符显示完全一致。

标准实现代码

import java.nio.charset.StandardCharsets;

public class EncodingConvertUtil {

    /**
     * 将ISO-8859-1编码的字节数组转换为UTF-8编码的字节数组
     * @param isoBytes ISO-8859-1编码的输入字节
     * @return UTF-8编码的输出字节
     */
    public static byte[] convertIsoToUtf8(byte[] isoBytes) {
        // 第一步:用ISO-8859-1规则解码字节得到Unicode字符串
        String rawStr = new String(isoBytes, StandardCharsets.ISO_8859_1);
        // 第二步:将Unicode字符串按UTF-8规则编码为字节
        return rawStr.getBytes(StandardCharsets.UTF_8);
    }

    /**
     * 直接从ISO-8859-1编码的字节中得到可正常显示的Java字符串
     * @param isoBytes ISO-8859-1编码的输入字节
     * @return 可正常显示的字符串
     */
    public static String getNormalString(byte[] isoBytes) {
        return new String(isoBytes, StandardCharsets.ISO_8859_1);
    }

    // 测试用例
    public static void main(String[] args) {
        // 字符Á在ISO-8859-1编码下的字节值为0xC1
        byte[] isoInput = new byte[]{(byte) 0xC1};
        String result = getNormalString(isoInput);
        System.out.println(result); // 输出 Á,显示完全正常
        byte[] utf8Output = convertIsoToUtf8(isoInput);
        // 字符Á在UTF-8编码下占2字节,输出长度为2符合预期
        System.out.println(utf8Output.length);
    }
}

注意事项

  • 禁止直接将 ISO-8859-1 字节数组用 UTF-8 规则解码,会生成不可修复的乱码字符�
  • 优先在读取数据源时直接指定编码,避免后续转码:比如读取文件/网络流时,给InputStreamReader构造参数传入StandardCharsets.ISO_8859_1,可以直接拿到正确的字符串
  • 仅当初次解码时错误用 ISO-8859-1 解码了 UTF-8 字节导致乱码时,才能用反向转码修复:new String(wrongStr.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8),如果是 ISO 字节被错误用 UTF-8 解码,乱码无法修复

内容的提问来源于stack exchange,提问作者Thiago Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:45:02