2012-06-27 203 views
3

我在java中編寫了一個android應用程序以獲取用戶答案並將它們保存在文件中。 問題是這個文件保存在utf-8中。 最終用戶將在IBM SPSS中打開這些文件,這是一個只能在ANSI(windows-1252)中讀取文件的Windows應用程序。如何將UTF字符串轉換爲ANSI並使用JAVA-ANDROID在SSD中創建ANSI文本文件

如何在ANSI代碼中創建文件以保存來自java-android應用程序的ssd卡?

我想我知道,將字符串轉換爲ANSI我應該使用:

String unicode = new String(asciiBytes, "windows-1252"); 

是正確的嗎?

我的代碼保存文件是這樣的:

File interviewFile = new File(placeOfSDD, fileName); 
FileWriter writer = new FileWriter(interviewFile, true); 
writer.append(textBody); 
writer.flush(); 
writer.close(); 

「的TextBody」是轉換爲ANSI字符串,而「interviewFile」是過於保存爲ANSI文件。

感謝您的幫助!

回答

8

字符串在JVM中表示爲Unicode。當你寫出來時,你需要將它轉換成適當的字符集。請使用OutputStreamWriter並指定Charset

OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file, true), 
                "windows-1252"); 
writer.append(textBody); 
writer.close(); 

關於你提到的第一個問題:

我想我知道,將字符串轉換爲ANSI我應該使用:
String unicode = new String(asciiBytes, "windows-1252");
是正確的嗎?

給定一個表示'windows-1252'字符集中字符的字節數組,這段代碼將構造適當的Java String(在JVM內部表示爲Unicode)。這不是「將字符串轉換爲ANSI」......它正在做相反的事情:將「windows-1252」轉換爲Unicode。

+0

是否有一種簡單的方法可以指定如何處理無法在CP1252中表示的字符? – sarnold

+0

@sarnold:如果你想更多的控制編碼過程,你打算使用[CharsetEncoder](http://docs.oracle.com/javase/6/docs/api/java/nio/charset/CharsetEncoder .html),但我從來沒有。 –

+0

非常好,謝謝! – sarnold