Rumah Java JavaAsas java导出csv乱码解决方法介绍

java导出csv乱码解决方法介绍

Dec 04, 2019 am 10:41 AM
java

java导出csv乱码解决方法介绍

1、问题

将查询的数据以xls文件导出时(UTF-8编码),数据正常;但以CSV文件导出时,文件中的中文乱码,同样是UTF-8编码,改成GBK编码导出时,中文显示正常。

本以为问题解决,后面导出含拉丁字符(如ÀÆÊàÌ)的数据时,以xls文件导出数据正常显示,以CSV文件导出时,文件中的拉丁字符显示为“?”号。

试着改成其他编码方式都无效,后面网上搜到了一篇解决该问题的方法。

2、解决方法

以CSV方式导出的文件中默认不含BOM信息,通过给将要输出的内容设置BOM标识(以 EF BB BF 开头的字节流)即可解决该问题。具体方法如下:(推荐:java视频教程

1

2

3

4

5

6

7

8

...

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(response.getOutputStream(), "UTF-8"); 

// 要输出的内容 

result = (String)contentMap.get(RESPONSE_RESULT); 

response.setHeader("Content-Disposition", "attachment;filename=test.csv"); 

outputStreamWriter.write(new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF})); 

outputStreamWriter.write(result); 

outputStreamWriter.flush();

Salin selepas log masuk

如果是以OutputStream流实现的 ,参数可以按如下修改:

1

2

3

out = response.getOutputStream();    

//加上UTF-8文件的标识字符     

out.write(new byte []{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});

Salin selepas log masuk

注:

BOM: Byte Order Mark,字节顺序标记(以下摘自百度百科)

在UCS 编码中有一个叫做 “Zero Width No-Break Space” ,中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。

UCS 规范建议我们在传输字节流前,先传输字符 “Zero Width No-Break Space”。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 “Zero Width No-Break Space(零宽无间断间隔)” 又被称作 BOM。

UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 “Zero Width No-Break Space” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的。

更多java知识请关注java基础教程栏目。

Atas ialah kandungan terperinci java导出csv乱码解决方法介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

Akar Kuasa Dua di Jawa

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Nombor Sempurna di Jawa

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Penjana Nombor Rawak di Jawa

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

Nombor Armstrong di Jawa

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Weka di Jawa

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Soalan Temuduga Java Spring

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Cuti atau kembali dari Java 8 Stream Foreach?

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Nombor Smith di Jawa

See all articles