2017-10-11 8 views
0

"Address Pippo p.2°"という文字列が含まれているフィールドがテーブルにあります。 txtファイルがあるので、私は問題を抱えている文字エンコーディングとtxtファイルでの可視化

(Âは不要です)

「ピッポのP.2°アドレス」: 私のプログラムは、この値を読み、txtファイルに書き込むが、出力はあります位置ファイル。

私はこれらのJava構文でファイルを開きます。 FileWriter fw = new FileWriter(file、true); pw =新しいPrintWriter(fw);

私は奇妙な文字

私のために任意の助けを借りずに文字列を書きたい

?事前

+0

「txtファイルは定位置ファイルですか?」とはどういう意味ですか? – DodgyCodeException

+0

あなたはそれを書くのに使われた文字エンコーディングで読んでいないので、[mojibake](https://en.wikipedia.org/wiki/Mojibake)。 –

答えて

0

おかげで、このようにUTF-8に文字列をコードしてください、

File file = new File("D://test.txt"); 
    FileWriter fw = new FileWriter(file, true); 
    PrintWriter pw = new PrintWriter(fw); 
    String test = "Address Pippo p.2 °"; 
    ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(test); 
    test = StandardCharsets.UTF_8.decode(byteBuffer).toString(); 
    pw.write(test); 
    pw.close(); 
+0

それは動作しますが、私は理由を逃す。今のところそれは大丈夫です。 –

1

JavaはUnicodeを使用しています。テキストをファイルに書き込むと、特定の文字エンコーディングを使用してエンコードされます。明示的に指定しないと、特定のJVMインスタンスのデフォルトとして構成されているものである「システムのデフォルトのエンコーディング」が使用されます。ファイルを書き込むためにどのエンコーディングを使用したのかを知る必要があります。次に、同じエンコーディングを使用してファイルの内容を読み込んで表示する必要があります。あなたが見ている面白い文字はおそらく、UTF-8を使ってファイルを書いてから、それを読み込んで表示しようとしているからです。 Windows-1252( "ANSI")エンコーディングを使用するメモ帳

あなたが望むエンコーディングを決めて、読み書きの両方でそれに固執する。

Writer w = new OutputStreamWriter(new FileInputStream(file, true), "windows-1252"); 

そして、あなたがUTF-8で記述した場合、その後、あなたはそれがUTF-8でファイルを読みたいというメモ帳を教えてくれます。Windows-1252、使用を使用して書き込みます。これを行う1つの方法は、ファイルの先頭に文字「\ uFEFF」(Byte Order Mark)を書き込むことです。

UTF-8を使用している場合、非ASCII文字が後続バイトを位置からずらすことに注意してください。したがって、たとえば、電話欄が常に200桁の位置で開始され、アドレス欄にASCII以外の文字があると、電話欄が201または202のバイト位置から開始されなければなりません。windows-1252エンコーディングを使用すると、この問題はありますが、そのエンコードはすべてのUnicode文字をエンコードできません。

+0

「あなたの特定のJVMインスタンスにデフォルトとして設定されているもの」:[何でも](https://en.wikipedia.org/wiki/Whatever_(slang))は有効な単語です。それはシステムによって、ユーザーによって、そして時々変化します。それはまさに欲しいものですが、ごくまれにしかありません。 –

関連する問題