2012-12-14 2 views
1

ByteStream을 사용하여 파일에 유니 코드 데이터를 쓸 수 있습니까? 내가 유니 코드 데이터를 작성하는 바이트 스트림을 사용하고Java의 바이트 스트림

다음
public static void main(String[] args) throws Exception { 

    String str = "Русский язык "; 
    FileOutputStream fos = new FileOutputStream("file path"); 
    fos.write(str.getBytes()); 
    fos.flush(); 
    fos.close(); 
} 

하지만 쓰기 properly.I 자바에 새로운 오전하지만 난 유니 코드 문자를 지원하지 않는 바이트 스트림을 읽고 있습니다 : 내 코드입니다. 그래서, 왜이 경우에 효과가 있습니까?

+0

@ 앤드류 물론, 내가 앞으로 돌볼 것입니다. –

+0

유니 코드는'getBytes()'호출에서 다루어 지지만 실제로 UTF-8 같은 명시적인 문자셋을 전달해야합니다. –

+0

@ 루이스 와서 만하지만 여기서는 UTF-8에 대해 언급하지 않고 있지만 그 작업은 어떻게 진행되고 있습니까? –

답변

3

으로하는 OutputStreamWriter와의 OutputStream을 포장하여 문자 데이터를 기록하는 것이 가장 좋습니다.

나쁜 정보원을 사용했거나 오해했을 가능성이 있습니다. 바이트 스트림은 바이트를 지원합니다. 따라서 바이트 스트림은 을 지원하며 바이트 단위로 표현할 수있는 모든 문자는입니다. 비디오, 텍스트, 그림, 음악 ... 바이트 스트림이 지원하지 않으면 디지털 컴퓨터에서 바이트 스트림을 전혀 사용할 수 없습니다.

단순한 1과 0의 시퀀스에서 이러한 것을 나타내는 트릭은 합의 된 규칙을 사용하는 것입니다. 특정 규칙에 따라 텍스트를 인코딩하면 수신자는 동일한 규칙을 사용하여 텍스트를 다시 디코딩 할 수 있습니다.

"Русский язык"은 키릴 문자를 지원하는 모든 인코딩에서 바이트로 표시 할 수 있습니다. 유니 코드의 인코딩 중 : UTF-8, UTF-16, UTF-32; Windows-1251, KOI8-R, KOI8-U, ISO-8859-5 ...

이는 이러한 인코딩이 서로 호환된다는 것을 의미하지 않습니다. 그들은 키릴 문자 스크립트를 인코딩 할 때 모두 호환되지 않으므로 인코딩에서 인코딩 된 텍스트는 해당 인코딩에서 엄격하게 디코딩되어야합니다.

.getBytes()은 키릴 문자 스크립트를 지원하는 플랫폼 기본 인코딩을 사용합니다. 당신은 그것이 UTF-8이라고 믿을 지 모르지만 Windows 사용자라면 Cp1251 일 가능성이 훨씬 큽니다. "유니 코드 문자"를 사용했기 때문에 함정에 빠지지 마십시오. 파일이 실제로 UTF 인코딩으로 인코딩됩니다. 그러면 인코딩 문제가 발생합니다.

프로그램이 모든 플랫폼에서 동일하게 작동하고 그래서 당신은 항상에서 어떤 프로그램이 생성 된 파일을 인코딩 알고 있도록 그래서 항상 인코딩에 대한 명시 적 코드로, 당신이 할 수 있었다 :.

또는

String str = "Русский язык "; 
FileOutputStream fos = new FileOutputStream("file path"); 
fos.write(str.getBytes("UTF-8")); 
fos.flush(); 
fos.close(); 
다른 대답에 의해 제안 :

String str = "Русский язык "; 
OutputStreamWriter osw = new OutputStreamWriter(
     new FileOutputStream("file path"), "UTF-8" 
); 
osw.write(str); 
osw.flush(); 
osw.close(); 

이 기술적으로 동일하다; 텍스트가 UTF-8 규칙에 따라 바이트로 변환됩니다.

+0

이것은 정말 좋은 답변입니다, appriciate, 어떤 힌디어 문자를 사용한다면, 그것은 또한 키릴 문자를 지원하는 모든 인코딩에서 바이트로 표시 될 것입니까? –

+0

@RiteshKaushik 아니, 당신은 Devanagari 문자를 지원하는 인코딩이 필요합니다. 그러나 유니 코드에는 행성에 사용 된 모든 문자가 포함되어 있으므로 UTF-8로도 안전합니다. – Esailija

+0

@ Esailija : Thumbered for reply pa. 그러나 텍스트가 힌디어이고 UTF-8을 지정하지 않으면 내 코드에서 사용할 것입니다. 필자가 ISO 8859-1 인 기본 인코딩을 사용하고 있는데, "FileOutputStream"을 사용하여 (UTF-8을 사용하지 않고) 텍스트 파일에 힌디어 문자를 쓰더라도이 경우 어떻게 작동합니까? –

1

내가 그 바이트 스트림 유니 코드 문자를 지원하지 않습니다 읽고 작가

Writer out = new OutputStreamWriter(new FileOutputStream("file path"), "UTF-8")); 
관련 문제