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文字をエンコードできません。
「txtファイルは定位置ファイルですか?」とはどういう意味ですか? – DodgyCodeException
あなたはそれを書くのに使われた文字エンコーディングで読んでいないので、[mojibake](https://en.wikipedia.org/wiki/Mojibake)。 –