Windows9x系ではないWindowsVistaやXP、NT、2000のメモ帳(Unicodeのbig endianは保存できるがおそらくUnicodeのbig endianでのBOMなし保存不可。UTF-8は保存できるがUTF-8でのBOMなし(UTF-8N)の保存不可。Unicodeのlittle endianは保存できるが仕様なので言うまでもないがUnicodeのlittle endianでのBOMなし保存不可。)で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?
やはりJavaのString型に近いUnicode big endianがよいのでしょうか?
それともJava側で自動認識してくれるのでしょうか?
XMLの場合は1行目でそのXMLファイルが使用している文字コードが何か宣言しますよね。
でもテキストファイルだと文字コードを宣言する場所がないみたいですし・・・(ここでの文字コードを宣言する場所としてはBOMは例外ですよ 念のため)
補足:メモ帳だとUnicode big endianで保存すると必ずBOMが付くみたいです。
メモ帳はLF改行が使えません。CR+LF改行のみ対応です。
No.4ベストアンサー
- 回答日時:
Windowsのメモ帳で読み書きするファイルを、Javaでも読み書きするとしたら、文字コードは何にするべきか、という質問でよろしいでしょうか。
それでしたら、文字コードは「MS932」にするのがよろしいと思います。
MS932とは、Windowsがデフォルトで使っている文字コード、いわゆる「シフトJIS」のことです。
Windows上で動くJavaプログラムは、デフォルトではMS932の文字コードでテキストファイルの読み書きを行います。
例 Reader r = new FileReader("input.txt");
Unix等のほかプラットフォームで動くJavaプログラムでしたら、
例 Reader r = new InputStreamReader(new FileInputStream("input.txt"), "MS932"));
となります。
>FireInputStreamクラスってテキストじゃなくてバイナリを読むためのクラスですよね!?このクラスでよいのでしょうか?
FireInputStreamはファイルをバイナリとして読みますが、FireInputStreamが読んだバイナリデータをInputStreamReaderが"MS932"と指定された文字コードで解釈するので、文字列データとして扱えるようになる仕組みです。
この回答への補足
thamansaさま、ご回答ありがとうございます。
特定の(MS932とは限らない)文字コードで保存する場合のプログラムはどのように書けばよろしいのでしょうか?
FileOutputStreamクラスはなんとなく分かるのですが
BufferedWriterとPrintWriterクラスのどちらを使えばよいのかが分かりません。
よろしくお願いいたします。
補足:将来はJavaFX Scriptで簡単にできるようになるかもしれませんね。
http://www.atmarkit.co.jp/news/200705/09/javafx. …
ありがとうございました!
WinXP以降のメモ帳であれば「MS932」の代わりに「UTF-8」でも
大丈夫なようです。
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …
http://www.ingrid.org/java/i18n/encoding/table-j …
No.3
- 回答日時:
>FireInputStreamクラスってテキストじゃなくてバイナリを読むためのクラスですよね!?このクラスでよいのでしょうか?
手元にあったコードをサンプルでのせただけです。
どう実装するかは質問者様次第です。
サンプルは、FileInputStreamをデータソースとしてBufferedReaderでファイルを処理していますのでreadLineなどのReader系メソッドは普通に使用できます。
>InputStreamReaderクラスってファイルじゃなくてコマンドラインからキーボードで入力されたテキスト読むためのクラスですよね!?
ちがいます。InputStreamから値を読み込むためのクラスです。
InputStreamとはその名の通り入力ストリーム(経路)のことで、
データソースが標準入力(System.in)や、ファイル、ソケットなどいろいろ扱えます。
なるほど!
クラス名をそのまま解釈すればよいのですね!
よく考えれば分かる事でした。
こういう部分は英語圏の人のほうが有利かな・・・
No.2
- 回答日時:
>new BuffedReader(new FireReader("Foo.txt"));
この場合、VMのデフォルト文字コードで解釈します。
>メモ帳ではUnicode big endian
ってUTF-16のBOM付きのことですよね?(違ったら補足してください)
だとするとJavaで読み込む際は
例)
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("[ここにファイルパス]"), "UTF-16BE"));
のようになります。
※すいません。確認はしていません。
何か勘違いされているように思いますが、ファイルの文字コードは何でも構いません。
Javaでファイルを読み込む際に文字コードを指定することで、
そのファイルのバイト列を指定の文字コードでVMのコンバータがUCS-2(Javaの内部コード)にマップするのです。
従って、ファイルの文字コードとJavaでファイルを読み込む際の文字コード指定に差異があるとUCS-2へのマップが当然上手く行きませんので文字化けが発生するわけです。
>UCS-2の65535文字で表現できない文字は4バイトで表現するらしい
いわゆるサロゲートペアとよばれるものです。
Javaは1キャラクタを16bitでしか表現できないため
2キャラクタで1文字として認識させるタイプの文字です。
この回答への補足
>メモ帳ではUnicode big endianってUTF-16のBOM付きのことですよね?
ええ、そうです。
FireInputStreamクラスってテキストじゃなくてバイナリを読むためのクラスですよね!?このクラスでよいのでしょうか?
InputStreamReaderクラスってファイルじゃなくてコマンドラインからキーボードで入力されたテキスト読むためのクラスですよね!?
コンストラクタの第一引数がSystem.in以外も使えるんですね!!
No.1
- 回答日時:
テキストファイルについてはJava側で読み込むときに文字コードを指定します。
指定しない場合は、VMのデフォルト文字コードになります。
※Readerクラスで読み込む場合を想定しています。
どのみちUTF系のコードは自動識別できなかったと思いますので自動判別が必要であれば実装者側で何らかの方式で判断する必要があります。
Javaがどうこうではなく、クライアントがWindowsだからMS932で縛るとかではNGでしょうか。
ぶっちゃけ、保存文字コードという意味だとJavaがコンバータを持っている文字コードであれば何でも良いと思いますが。
私が過去携わってきたシステムだと、クライアントがWindowsありきだったので
ファイルの文字コードは全てWindows-31Jとして扱うことが一般的でしたね。
この回答への補足
ARIA9さま、アドバイスありがとうございます!!
new BuffedReader(new FireReader("Foo.txt"));
たとえばこれの場合、メモ帳ではUnicode big endian(JavaのString型の文字コードであるUCS-2の互換性を持たせた拡張。UCS-2の65535文字で表現できない文字は4バイトで表現するらしい)で保存すれば文字化けせずに読めるのでしょうか?
String型以外ってバイト配列ですよね、Swingとかのテキストフィールドに入力された日本語文字列の取得(getText()かな?この文法ってawtだけ?)の処理もString型で扱える文字コードであるUCS-2への文字コード変換が必要?(OSによって標準文字コードが違うから)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 文字化け。メモ帳でUTF-8に変換後、エクセルへ貼り付けたいです。 3 2022/08/14 07:21
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Excel(エクセル) 【マクロ】PasteSpecialメソッドにて、コードが動かない理由が分かりません 2 2023/08/15 20:47
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- フリーソフト 日本語の入力をすべて記録する 1 2022/07/07 12:52
- Windows 8 win8 "ベータ ワールドワイド言語サポートで Unicode UTF-8 を使用"を出したい 2 2023/05/23 19:57
- 電子書籍 WIN10で誤ってメモ帳タッチしてしまった 2 2022/12/29 21:02
- HTML・CSS メモ帳の段落の揃え方 2 2023/08/01 08:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaクラスファイルをEclipseで...
-
classファイルについて
-
Eclipse・プロジェクトで、フォ...
-
Eclipseでデバッグが出来ないエ...
-
プログラム実行の際に、「ソー...
-
html上で、バッチやexeファイル...
-
Eclipseのアンインストールの仕方
-
マイクラjavaでForgeを入れたい...
-
Eclipseで、プロジェクト名のと...
-
セットアップファイル(MSIとEX...
-
Tomcatは起動しますが初期index...
-
【Tomcatが突然動かなく...
-
「StrutsによるWebア...
-
eclipse pleiades phpのインス...
-
JAVAでアルファベットを数...
-
vs codeはオフラインでも使用で...
-
LaTeXでのアンダーバーの入力
-
ユーザー名を漢字で登録してし...
-
VBプログラムから「管理者とし...
-
javaが文字コードの影響でコン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipse・プロジェクトで、フォ...
-
javaクラスファイルをEclipseで...
-
Eclipse「リフレッシュ」と「ク...
-
classファイルについて
-
SVFの設定について:クラスパス...
-
eclipse でclassesフォルダーが...
-
EclipseでHTTP404エラーが出る。
-
earファイルを展開する方法
-
【Eclipse】パッケージ・エクス...
-
JADで*.jarごとデコンパイルす...
-
プログラム実行の際に、「ソー...
-
jdbcドライバのjarファイルにク...
-
「削除するか、クラスパスの正...
-
コンパイルをしようとするとエ...
-
java クラスファイルとソースコ...
-
コンパイルした後 java (class...
-
【Eclipse】逆コンパイルでエラ...
-
Javaアプリケーションのアイコ...
-
VisualStudioでC++クラスを追加...
-
「メイン・マニフェスト属性が...
おすすめ情報