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
相关产品推荐
相关产品推荐

