使用ICsvListWriter生成CSV时上标字符出现乱码问题求助
解决SuperCSV写入上标字符时出现乱码的问题
这个问题我之前也碰到过,本质是字符编码不匹配导致的:你看到的¹是UTF-8编码的上标字符¹(UTF-8字节为0xC2 0xB9)被ISO-8859-1编码解码后的结果,而SuperCSV默认使用系统默认字符编码(通常是ISO-8859-1),而非UTF-8。
核心解决方案:显式指定UTF-8编码创建Writer
关键是初始化ICsvListWriter时,不要直接用FileWriter(它会沿用系统默认编码),而是通过OutputStreamWriter显式指定UTF-8编码。
示例代码如下:
import org.supercsv.io.CsvListWriter; import org.supercsv.io.ICsvListWriter; import org.supercsv.prefs.CsvPreference; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; public class CsvWriterFixExample { public static void main(String[] args) throws Exception { // 显式指定UTF-8编码构建Writer try (ICsvListWriter csvWriter = new CsvListWriter( new OutputStreamWriter(new FileOutputStream("output.csv"), StandardCharsets.UTF_8), CsvPreference.STANDARD_PREFERENCE)) { List<Object> columns = new ArrayList<>(); String myString = "abcd1"; // 使用Unicode转义或直接写入上标字符都可正常工作 columns.add(myString.replaceAll("1", "\u00B9")); csvWriter.write(columns); } } }
额外验证提示
写入完成后,确保用支持UTF-8的文本编辑器(比如Notepad++、VS Code)打开CSV文件,并且编辑器设置为UTF-8编码显示,避免因编辑器默认编码问题导致的显示异常。
内容的提问来源于stack exchange,提问作者Nags
相关产品推荐
相关产品推荐

