- PR -

Readerのエンコーディングを取得することは可能?

1
投稿者投稿内容
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2004-11-08 22:26
いつも御世話になっております。
StringReaderなどのReaderに入っている文字列などのエンコーディングを取得する事ってできないでしょうか?
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-08 23:13
そもそもStringReaderってのはStringの読み取りストリームです。
Javaでは文字列(String)は全てUTF-8でエンコードされている前提
ですから、取得もなにも「UTF-8」だということではないですか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-11-09 01:09
Javaでは内部で16ビットのエンコーディングを使っていると思います。UTF-16でしょうか。
で、hiro-taさんはこのことを知りたいのでしょうか?
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-09 02:29
あー私は勘違いしてたかもしれません。
Javaの文字列はUnicode(v2.0?)であってUTF-8,UTF-16エンコードとは
関係ない話しだったかもしれません(たぶん、、、でもUTF-16エンコード
で出力されるデータとJavaが内部で保持しているUnicodeって同一なんで
しょうか??、、私が質問者になって申し訳ないw)
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 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/09/17
投稿数: 667
投稿日時: 2004-11-09 11:52
引用:

StringReaderなどのReaderに入っている文字列などのエンコーディングを取得する事ってできないでしょうか?


「など」って何ですか? StringReader の他にどのような Reader サブクラスを想定しているのですか?

まず、他の方も言っているように StringReader は String から作るものなのでエンコーディングについて考える必要はないでしょう。String の時点で Unicode になっているわけですから。

ファイルの読み出しに使う FileReader のように InputStreamReader のサブクラスであれば、InputStreamReader#getEncoding() で元エンコーディングを得られるんじゃないかな。

もっと具体的にやりたいことを書いたほうがいいですよ。Reader では無理でも、(用途を十分に満たす) Reader のサブクラスならできる、ということもありますから。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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 ]
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2004-11-10 12:31
皆様、たくさんのお返事をありがとうございます。

InputStreamReaderであればgetEncodingでエンコーディングを取得できるがReaderでは無理ということですね。またStringReaderはStringがベースだからUnicodeだということですね。
いろいろ試しているうちにまた別の疑問がでてきましたがそれは別スレッドで質問したいと思います。ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)