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

ArrayList set()方法编码报错:无法映射字符,如何解决?

解决Java编译时Unicode字符编码错误问题

错误原因

你遇到的是编码不兼容问题:Java编译器默认采用US-ASCII编码编译源文件,但®属于Unicode字符(对应UTF-8的0xC2 0xAE字节序列),ASCII编码无法识别这些非ASCII字节,因此抛出"unmappable character"编译错误。

解决方案

以下三种方法可有效解决该问题:

1. 编译时指定UTF-8编码

在使用javac命令编译代码时,通过-encoding参数明确指定编码格式为UTF-8,命令如下:

javac -encoding UTF-8 HelloWorld.java

此方法让编译器以UTF-8编码解析源文件,能正确识别包含®在内的Unicode字符。

2. 用Unicode转义序列替代特殊字符

将代码中的®替换为对应的Unicode转义符\u00AE,修改后的代码行如下:

list.set(0,"Forever Garcinia Plus\u00AE");

这种方式无需修改编译参数,代码在任意编码环境下都能正常编译运行。

3. 配置IDE默认编码为UTF-8(IDE开发场景)

如果使用IDEA、Eclipse等IDE开发,直接将默认编码设置为UTF-8:

  • IDEA:依次打开File → Settings → Editor → File Encodings,将所有编码选项(Global Encoding、Project Encoding、Default encoding for properties files)设置为UTF-8
  • Eclipse:依次打开Window → Preferences → General → Workspace,将Text file encoding设置为UTF-8
    配置后,新建和编译文件都会默认使用UTF-8编码,从根源避免编码冲突。

修正后的代码示例(转义符方式)

import java.util.ArrayList;
import java.util.List;

public class HelloWorld {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Original Item");
        list.add("Gel Aloe Vera");
        list.add("Hello");
        list.add("Forever Viber");
        
        // 使用Unicode转义符替换®
        list.set(0,"Forever Garcinia Plus\u00AE");
        
        System.out.print(list);
        System.out.println("Hello, World!");
    }
}

编译运行后即可得到期望输出:[Forever Garcinia Plus®, Gel Aloe Vera, Hello, Forever Viber]Hello, World!

内容的提问来源于stack exchange,提问作者Valentin Georgiev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:22:09