Java Java베이스 쿼리된 데이터를 Java에서 csv 파일로 내보낼 때 잘못된 문자가 나타납니다.

쿼리된 데이터를 Java에서 csv 파일로 내보낼 때 잘못된 문자가 나타납니다.

Dec 04, 2019 pm 03:46 PM
csv java 왜곡된 문자 내보내다 데이터

쿼리된 데이터를 Java에서 csv 파일로 내보낼 때 잘못된 문자가 나타납니다.

1. 문제

쿼리된 데이터를 xls 파일(UTF-8 인코딩)로 내보낼 때 데이터는 정상인데, CSV 파일로 내보낼 때 파일의 중국어 왜곡 문자도 UTF-입니다. 8로 인코딩되어 변경되었습니다. GBK 인코딩으로 내보낼 경우 중국어가 정상적으로 표시됩니다.

나중에 라틴 문자(예: ÀÆäàÌ)가 포함된 데이터를 내보낼 때 문제가 해결된 줄 알았는데, xls 파일로 내보낸 데이터가 정상적으로 표시되었습니다. "?".

추천 동영상 튜토리얼: java 강좌

2. 솔루션

CSV 모드로 내보낸 파일에는 기본적으로 출력할 콘텐츠에 대한 BOM 식별자(EF BB BF로 시작하는 바이트)가 포함되어 있지 않습니다. 스트림)이 이 문제를 해결할 수 있습니다.

구체적인 방법은 다음과 같습니다.

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();

로그인 후 복사

OutputStream 스트림으로 구현하는 경우 매개변수를 다음과 같이 수정할 수 있습니다.

1

2

3

out = response.getOutputStream();    

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

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

로그인 후 복사

참고:

BOM: Byte Order Mark, byte order mark(다음은 Baidu 백과사전에서 가져옴)

UCS 인코딩에는 "Zero Width No-Break Space"라는 문자가 있는데, 이를 중국어로 번역하면 "Zero Width No-Break Space"로 번역되며 해당 인코딩은 FEFF입니다. FFFE는 UCS에 존재하지 않는 문자이므로 실제 전송에서는 나타나지 않아야 한다.

UCS 사양에서는 바이트 스트림을 전송하기 전에 "Zero Width No-Break Space" 문자를 전송할 것을 권장합니다. 따라서 수신자가 FEFF를 수신하면 바이트 스트림이 FFFE를 수신하면 Big-Endian임을 나타냅니다. 이 바이트 스트림은 Little-Endian입니다.

그래서 문자 "Zero Width No-Break Space(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에서 csv 파일로 내보낼 때 잘못된 문자가 나타납니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 제곱근 자바의 제곱근 Aug 30, 2024 pm 04:26 PM

자바의 제곱근

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

자바의 완전수

Java의 난수 생성기 Java의 난수 생성기 Aug 30, 2024 pm 04:27 PM

Java의 난수 생성기

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

자바의 웨카

자바의 암스트롱 번호 자바의 암스트롱 번호 Aug 30, 2024 pm 04:26 PM

자바의 암스트롱 번호

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 스미스 번호

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

Java Spring 인터뷰 질문

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까?

See all articles