- - PR -
Readerのエンコーディングを取得することは可能?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-08 22:26
いつも御世話になっております。
StringReaderなどのReaderに入っている文字列などのエンコーディングを取得する事ってできないでしょうか? | ||||
|
投稿日時: 2004-11-08 23:13
そもそもStringReaderってのはStringの読み取りストリームです。
Javaでは文字列(String)は全てUTF-8でエンコードされている前提 ですから、取得もなにも「UTF-8」だということではないですか? | ||||
|
投稿日時: 2004-11-09 01:09
Javaでは内部で16ビットのエンコーディングを使っていると思います。UTF-16でしょうか。
で、hiro-taさんはこのことを知りたいのでしょうか? | ||||
|
投稿日時: 2004-11-09 02:29
あー私は勘違いしてたかもしれません。
Javaの文字列はUnicode(v2.0?)であってUTF-8,UTF-16エンコードとは 関係ない話しだったかもしれません(たぶん、、、でもUTF-16エンコード で出力されるデータとJavaが内部で保持しているUnicodeって同一なんで しょうか??、、私が質問者になって申し訳ないw) | ||||
|
投稿日時: 2004-11-09 11:07
強いて言えばUTF-16に近いと思いますが、一緒じゃないと思いますよ。
UTF-16エンコードは、バイト配列の先頭2バイトに後続のバイト配列のエンディ アンを識別するフラグが入っている物を指すので、Javaの内部エンコードは 「UTF-16と一緒」とは言わないと思います。 UTF-16BEまたはLE(エンディアン識別子なしを許容するビックエンディアンまた はリトルエンディアン)のどちらかと一緒、といえるかもしれませんね。 私は、Javaの内部エンコードはUCS-2(いわゆる16bitUnicodeってこれですよね?)、 但しエンディアンは不明或いはJVMの実装依存、JVM内部では違う形式で保存されて いるかもしれないが、それらはプログラマが意識する必要はない(どうせI/Oを行う 際には明示的にキャラセット指定を行うので)、と理解していますが、間違っている でしょうか? | ||||
|
投稿日時: 2004-11-09 11:52
「など」って何ですか? StringReader の他にどのような Reader サブクラスを想定しているのですか? まず、他の方も言っているように StringReader は String から作るものなのでエンコーディングについて考える必要はないでしょう。String の時点で Unicode になっているわけですから。 ファイルの読み出しに使う FileReader のように InputStreamReader のサブクラスであれば、InputStreamReader#getEncoding() で元エンコーディングを得られるんじゃないかな。 もっと具体的にやりたいことを書いたほうがいいですよ。Reader では無理でも、(用途を十分に満たす) Reader のサブクラスならできる、ということもありますから。 | ||||
|
投稿日時: 2004-11-09 12:15
InputStreamReader(InputStream in, String charsetName)
の charsetName などを拾えるようにはなっていません Public でもないし Private に記憶されているかも不明 Javaの文字列(UNICODE)としてI/Oするのでなく、 生のバイトでI/Oすればよいのでは [ メッセージ編集済み 編集者: MMX 編集日時 2004-11-09 12:20 ] | ||||
|
投稿日時: 2004-11-10 12:31
皆様、たくさんのお返事をありがとうございます。
InputStreamReaderであればgetEncodingでエンコーディングを取得できるがReaderでは無理ということですね。またStringReaderはStringがベースだからUnicodeだということですね。 いろいろ試しているうちにまた別の疑問がでてきましたがそれは別スレッドで質問したいと思います。ありがとうございました。 |
1