2010-04-29 2 views
9

Android API 예제에 표시된 표준 InputStreamReader 메소드를 사용하여 확장 문자 (예 : 프랑스어 악센트 부호가있는 문자)를 텍스트 파일에 읽고 쓸 수 없습니다. 파일을 다시 읽을 때 :Android에서 디스크에 UTF-8을 읽고 쓰는 방법은 무엇입니까?

InputStreamReader tmp = new InputStreamReader(in); 
BufferedReader reader = new BufferedReader(tmp); 
String str; 
while ((str = reader.readLine()) != null) { 
... 

문자열 읽기는 줄 끝이 아닌 확장 문자에서 잘립니다 그 다음 줄의 두 번째 줄은 다음 줄에옵니다. 내 데이터를 UTF-8로 유지해야한다고 가정하고 있지만 그 예는 찾을 수 없으며 Java를 처음 사용합니다.

누구나 관련 문서에 대한 예 또는 링크를 제공 할 수 있습니까?

+0

이것은 실제로 일반적인 자바 문제입니다. – itsadok

+0

일반적인 Java입니까? openFileOutput을 사용하여 Android의 비공개 데이터 영역에 쓰는 경우 charset 옵션을 가진 생성자가 없습니다. http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String , % 20int % 29 –

답변

26

매우 간단하고 간단합니다. : 기본 캐릭터 세트 UTF-8이기 때문에

String filePath = "/sdcard/utf8_file.txt"; 
String UTF8 = "utf8"; 
int BUFFER_SIZE = 8192; 

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), UTF8),BUFFER_SIZE); 
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), UTF8),BUFFER_SIZE); 
+0

감사합니다. 개인 데이터 영역에도 저장할 때 작동합니까? –

+0

예. 안드로이드는 여기에'openFileOutput (..) '과 관련이 없습니다. – yanchenko

+0

openFileOutput을 사용하고 싶습니까? –

9

InputStreamReader을 인스턴스화 할 때 문자 집합을 사용하는 생성자를 사용하십시오.

InputStreamReader tmp = new InputStreamReader(in, "UTF-8"); 

그리고 호출합니다 (Doc에 더 많은 참조) 할 수 있도록 내가 좋아하는 OutputStreamWriter

와 비슷한 일이, 내 코드에 약간의 유틸리티 클래스에

public static final Charset UTF8 = Charset.forName("UTF-8"); 

을 가지고 할

InputStreamReader tmp = new InputStreamReader(in, MyUtils.UTF8); 

UnsupportedEncodingException 한 번.

1

이 단지도 명시 적으로 UTF-8로 지정하지 않고, 안드로이드에서 작동합니다. 이 문제를 재현 할 수 있다면, 여기가 재생 될 테스트 케이스 버그를 제기하십시오

http://code.google.com/p/android/issues/entry

+0

버그 수정을 위해 UTF-8로 변경해야했습니다. 이전에 프랑스어 E 곡절 기호와 같은 '확장 문자'가 발견되어 파일을 제대로 다시 읽지 못하게 한 사용자에게 긍정적 인 결과가있었습니다. 사용자에게 파일을 보내고 디버거에서 다시 읽으면 확장 된 문자가 줄 끝으로 처리되는 것을 보았습니다. 나는 아직도 원본 파일을 가지고있다.내가 집에 돌아 왔을 때 나는 그들을 사용하여 시범 프로젝트를 진행할 것이다. 내 첫 번째 질문은 코드를 참조하십시오. http://stackoverflow.com/questions/2700983/problem-saving-file-on-motorola-droid-android-2-1 –

0

당신이 문제의 이러한 종류의이 일을하려고에 직면합니다. 에 EncodeDecode 데이터를 입력해야합니다. 이것은 나를 위해 일했다. 필요한 경우 코드를 공유 할 수 있습니다.

0

프로젝트 탐색기에서 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택하여 파일 인코딩을 확인하십시오. 올바른 인코딩이 아닌 경우 특수 문자를 변경 한 후에 다시 입력해야합니다. 그렇지 않으면 적어도 내 경험이었습니다.

관련 문제