• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストファイルの先頭から文字を1文字ずつ取得し、)

テキストファイルの文字コード、バイト数、ファイルポインタを取得する方法

このQ&Aのポイント
  • テキストファイルの先頭から文字を1文字ずつ取得し、文字コード、バイト数、ファイルポインタを取得する方法について解説します。
  • テキストファイルのエンコーディング方式はShift_JIS、EUC-JP、UTF-8、UTF-16LEに限定されます。
  • エンコーディング方式の特定には外部リソースへの問い合わせが必要ですが、InputStreamReaderクラスやRandomAccessFileクラスを組み合わせることで目的を達成できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.1

「読み込み元のバイト数が取得出来ず」とありますが、 InputStreamReaderのread()で読んだ1文字の値をcとすると、 char[] temp = new char[1]; temp[0] = (char)c; String s = new String(temp, encoding); // new String(temp) でいいのかな?? int n = s.getBytes(encoding).length; としてnが読み込んだバイト数に等しくなるかと思います。あまりきれいではありませんが。 似たようなことをCharsetクラスやCharsetEncoderクラスのencode()でもできるかもしれません。 これを積算すればファイルポインタが今何処を指しているかわかるので、 InputStreamReaderを継承したクラスを作って、 read()をオーバーライドして位置を積算するようにして、 現在の位置を返すメソッドを追加すればよいかと思います。 ついでに空白などをスキップすることもできるでしょう。 試したわけではないので、アイディアだけの紹介でした。

metorontbl
質問者

お礼

回答ありがとうございます。 String#getBytes()メソッドの存在を知らなかった為、まさしく福音の回答でした。 ちょっと荒組してみましたが、きちんと指定したエンコード方式でのバイト数が取得できています。 このアイディアを頂き、実装に取り掛かってみようと思います。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 1バイトのみのテキストのエンコーディング

    「Googleサイトマップ」用にテキスト形式のサイトマップファイルをアップロードしたところ、文頭に何か2バイト付加されてエラーになりました。 MAC OS9でJedit3からUTF-8/LFで保存したもので、サイトのURLを羅列しただけの内容です。 WINDOWSのK2EditorでUTF-8Nにして再送信しましたが、まだGoogleが確認していません。 そこで大変基本的(初歩的)な疑問ですが、1バイトASCII文字のみのテキストファイルをUTF-8エンコーディングで保存して再度開くとエンコーディングはどうなるのでしょうか? 改行コード(CR/LF)はShift-JISと同じ(0D/0A)なのでしょうか。そうだとすると保存するときの「漢字コード」がShift-JISでもUTF-8でも2バイト文字を含まない場合は結果(ファイルの内容)は同じになるのでしょうか? テキストファイルの内容(漢字コードや制御文字)を見るツールなんてものがあるのでしょうか。

  • EUCのテキストファイルを読み込むと「文字化け」してしまいます

    ネットワーク上からテキストファイルを読み込むiアプリを作っています。 Shift-JISのテキストファイルは正しく表示されるんですが、 EUCのテキストファイルを読み込むと文字化けしてしまいます。 具体的にいうと,「重奏」という文字列は「スナチユ」と表示されてしまいます。 元のテキストファイルのエンコード方式をShift-JISにすれば直るんですが、テキストファイルはEUCのまま読み込みたいのです。 どうすればよいでしょうか…。

    • ベストアンサー
    • Java
  • テキストファイルの文字コードが

    フォルダの中にあるテキストファイルの文字コードが UTF-8なのかShift_JISなのか どうやって調べれば良いですか? プロパティを見てもわかりません。

  • テキストファイル 文字コード変換

    Mac OSX 10.9にて、pagesを使って文章作成をしています。 この文章をポメラDM5で閲覧・編集をしたいと思っています。 DM5はテキストファイル(shift-jis)のみを扱えるので、pagesの文章を標準テキストとして書き出したものをmiで開き、文字コードを変換しています。 ところが、文字コード変換を試みてもUTF-8にしかない文字があるので変換できない旨が表示され、変換ができないファイルがいくつかあります。 具体的にどの文字がひっかかるのかがわかれば対処のしようもあるのですが、miでは表示されません。 ネット上でUTF-8にしかない文字を調べ、元の文章内を検索してみましたが、らちがあきませんでした。 そこで、お聞きしたいのですが、 1.UTF-8のテキストファイルをshift-jisに変換するソフト等 その際、文字コードに依存する文字があったら自動変換、または強制的に変換(その文字だけ文字化けするなど)するもの ※なお、multi text converterというソフトはエラーで落ちてしまい、使えませんでした。 http://www.rk-k.com/software/mtc 2. テキストファイル中のUTF-8にしかない文字を発見して教えてくれるソフト等 3. その他の解決手段 のいずれか、有用なものを教えていただけると幸いです。 なお、windows系のPCも持っていますのでソフト等はMacにこだわりません。 できれば無料のソフトが良いのですが、難しければ有料のものでも構いません。 よろしくお願いいたします。

    • ベストアンサー
    • Mac
  • UNIXなどで、テキストファイルの文字コードを、utf-8 → S-J

    UNIXなどで、テキストファイルの文字コードを、utf-8 → S-JIS に変換するコマンドがあれば教えてください。

  • UTF-8のテキストファイルを開く方法

    UTF-8のテキストファイルを開く方法 こんにちは。VBA初心者です。 FSOを使ってテキストファイルを開いてみたのですが、S-JISで開かれるらしく、文字化けしてしまいました。 そこで、WEBで調べてみると「ADODB.Stream」というものを使用すると、「オブジェクト.Charset = "UTF-8"」のように文字コードを指定できることがわかりました。 しかし、テキストストリームというものがいまいち理解できていないので使い方がよくわかりません。 以下のようなコードを書いてみましたが、「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となってしまいました。 どこが間違っているのか教えていただけないでしょうか。 ちなみに「Open」ステートメント(Open バス名 For モード As #ファイル番号)を使用してテキストを内部的に開いた場合はどうなるのでしょうか。もし、標準でS-JISだった場合は、UTF-8にする方法はあるのでしょうか。 どうかよろしくお願いします。 Sub UTF8を開く() Dim myADODB As Object Set myADODB = CreateObject("ADODB.Stream") Dim i As Integer Worksheets("sheet1").Activate i = 1 With myADODB .Charset = "UTF-8" .ReadLine ("D:\test\sample.txt") Do Until .AtEndOfStream = True Cells(i, 1).Value = myADODB i = i + 1 Loop .Close End With End Sub

  • PHPをhtmlに読み込んだファイルが文字化けする

    お世話になります。 通常のHTMLファイルにWordPressを生成し、WPでブログを書いたファイル(/wp/index.php)を読み込んで、表示させたいと考えております。その件に関してはなんとか表示できるようになったのですが、私が作ったhtmlファイル(/wp/index.html)はShift-JISで、 WordPressが吐き出してるブログ(/wp/index.php)はUTF-8で文字コードが違うので、ブログ部分のみ文字化けが起こります。それで上記のように/wp/index.htmlのcharsetをShift-JISからUTF-8へ変更しました。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> ところが「テキストコーディングエラー」とポップアップが起こりました。「設定したテキストエンコーディングで保存済みですが、テキスト中のcharset設定と一致していないので、ブラウザ等で表示すると文字化けする可能性があります」とのことです。その結果、今度はブログ部分がちゃんと表示され、HTMLで作成した部分は文字化けするようになりました。これはPHPの問題ではないかもしれませんが、原因がどうにも分かりません。もしかしたら初歩的な質問をしているかもしれませんが、よければ教えていただけないでしょうか。

    • ベストアンサー
    • PHP
  • サーバ上のテキストファイルの文字化けについて(iMac/Safari)

    お世話になります。 当方Windousユーザーでサイト制作に関わっています。 Macの環境が身近になく困っています。 あるサイトからテキストファイルにリンクしているのですが そのテキストファイルの文章がiMacのSafariで見ると文字化けします。(MacOS X10.3.9、Safari 1.3.2 (v312.6)) 念のためShift-JISとUTF-8等でそれぞれ保存した別ファイルでテストしてみたところ、 UTF-8では、正常に表示されたもののShift-JISでは文字化けします。 ちなみにWindowsXPのSafariや、MacBookのSafariだと問題なく表示されます。 (MacOS X10.5.2、Safari 3.1.1) これは、このバージョンの問題なのでしょうか? UTF-8のテキストファイルにリンクする以外の改善方法をご存知の方はいらっしゃいませんか? いらっしゃいましたら、教えていただけないでしょうか? 宜しくお願いいたします。 ※何か不足している情報があれば調べますので、ご指摘ください。

    • ベストアンサー
    • Mac
  • UTF-8とUTF-16について質問です。

    まず、【あ】という文字をUTF-16というエンコーディング方式で バイト配列化すると [0] => 66 [1] => 48 というバイト値が帰ってきます。 これはとりあえずC#で処理を行いました。 Encoding encode = Encoding.GetEncoding("UTF-16"); String value = "あ"; Byte [] byteData = encode.GetBytes(value); それでは【あ】という文字の文字集合のコードポイントは右記となります。【0x3042】 これは、出力された 66、48という数値を16進数に変換すると 66=>42 48=>30 となり、リトルエンディアン環境で 0x4230という16進数であらわされるようです。 この点も不思議なのですが今回知りたいのはUTF-16でエンコーディングされた バイト配列はこのように文字集合のコードポイントに復帰?させることができますよね? ではUTF-8でエンコーディングされた【あ】という文字の バイト配列 [0] => 227 [1] => 129 [2] => 130 というバイト配列を上記のような文字集合のコードポイントの値へ復帰させることは できるのでしょうか? それに伴いUTF-8でつかわれる文字集合もUTF-16と同じコードポイントなのでしょうか? 上記 1.UTF-8でエンコーディングされた文字列をバイト配列にした場合 元の文字集合に戻せるのか?戻せるならばその戻し方は? 2.UTF-8がさす文字集合とUTF-16がさす文字集合はおなじものですよね? 上記二点よろしくご教授ください。

  • 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)

    【疑問の背景】 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)   国際標準で使われているUTF-8で統一しておけば問題はないだろうと思って開発を進めていると・・・   UTF-8は「日本語が2~4バイト」で扱われるという、バイトの扱いが厄介であるため、   できればJavaでのUTF-8で開発は避けたい、だから「Shift-JIS」にしておきたいという話があがり、   各々のファイルにどの文字コードを設定すれば良いのかがわからなくなっている状態です。    いくつかの疑問がでていまして  判る範囲で構いませんので文字コード設定の判断についてのアドバイスいただけませんでしょうか? 【現在の開発文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): UTF-8 Javaファイル(Bean): UTF-8 Javaファイル(JSPから出来たサーブレット): UTF-8 データベース: UTF-8 【設定したい今後の予定文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): Shift-JIS Javaファイル(Bean): Shift-JIS Javaファイル(JSPから出来たサーブレット): Shift-JIS データベース: UTF-8 【疑問1】 javaファイル(servlet,Bean)をどのコードにすべきかについて  全てS-JISにした方がいいのか、UTF-8にした方がいいのかどうあるべきなのでしょうか?  (UTF-8 で 「日本語が2~4バイト」として扱われると、どういった弊害が発生するのでしょうか?) 【疑問2】 javaファイルをS-JISに変える方法について  今はサクラエディターというツールで  名前を付けて保存 → 文字コードセット「Shift-JIS」 → 保存 → ファイル名の文字コードセットの変更完了    今はエクスプローラーから直接フォルダの中にあるファイルを触っている状況なのですが、  eclipseから「ファイルの文字コードセットを変更する方法」はありますでしょうか? 【疑問3】 「Shift-JIS」に設定して開発していく必要性について  既存で「utf-8」で設定されているjavaファイルを、「Shift-JIS」に設定して開発していく必要性はあるのでしょうか? (all in one eclipse 3.4 を入れたとき、デフォルトで「utf-8」でjavaファイルが作られるつくりになっているみたいなのですが・・・)   【疑問4】 javaファイル作成時、「Shift-JIS」の形式でファイルを生成する方法について     現在、javaファイルを作成する場合「utf-8」のコードでjavaファイルが生成されるようになっています。      【自作で作成したjavaファイルの場合】    「サクラエディターを使用して、文字コードセットをShift-JISに変更すれば、ずっとShift-JISのファイルの状態」にすることができました。      しかしここで問題が出たのですが      【JSPファイルから自動生成されたjavaファイル(servlet)の場合】    「サクラエディターを使って、Shift-JISに変更した後に、JSPファイルを編集すると、また“utf-8に戻ってしまう” 状態」です。    現状としては「JavaファイルはShift-JISに統一して欲しい」という要望なので、    JSPから自動生成されたjavaファイルが "utf-8" になってしまいます。      JSPから自動生成されたjavaファイルを    "常にShift-JISに設定する" 方法はありますでしょうか?     【環境】  OS   ・WindowsXP Pro    java開発環境   ・all in one eclipse(3.4)   ・TomCat(6.0)   ・Java JRE(1.6)   ・MySQL(5.0)

    • ベストアンサー
    • Java