質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

17397閲覧

[Qt]ファイルの文字コード判別

BeatStar

総合スコア4962

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/09/07 02:38

趣味でC++やっています。
( Qtを使っています )

テキストファイルの文字コード( UTF-8, ANSI etc. ) を判別する方法はありますでしょうか?

前回の質問で一応ファイルの入出力に関しては何とかなったのですが、

GUIで QTextEdit ( Windows APIだと EDIT ) 等にD&D(ドラッグアンドドロップ)されたときにD&Dされたファイルを読み込んで
QTextEditに表示する...みたいな処理をするときに、前回の方法だと UTF-8か ANSIか...みたいなやつがわからないと無理で、
もしUTF-8と限定しても...なので

D&Dされた -> D&Dされたファイルの文字コードを判別 -> 適切な文字コードでファイルを読み込む -> QTextEdit等に出力etc.

のようにしたいのですが。

読み込み自体は 前回の方法で、(fgetws関数だったかな。)それで読み込んでいます。
QTextEdit等に出力したりするのは問題ありませんが、

問題は「文字コードをどうするか」( UTF-8, ANSI... をどうやって割り出すか ) です。

自分でも「Qt テキストファイル 文字コード 調べる」で検索してみましたが、単に読み込む・書き込む...っていうやつだけでした。
( 私が読んだ範囲では。 )

[情報]
言語: C++
コンパイラ: MinGW
Qt: 5.6
Windows API: あり
OS: Windows XP, 7, 10 ( WinAPIを使っているため )

もちろん、C言語由来でも、C++由来でも, Qtでも, WinAPIでもいいですが、とにかく判別ができないことには...

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

グーグルさんで、"文字コード 判定方法" ("方法"はグーグルさんがつけてくれた)としたら、文字コードを判別する なんてページがありました。

詳しくは、そちらを見て頂くとして、まずは、BOM判定からは、他の方の書かれている通りで、問題はその後ですね。結局は、ファイルの中身をスキャンするしか方法は無いと思います。Unicode(UTF-8, UTF-16,..)だけなら、そんなは難しくないと思います。まあ、Shift-JISを含めてもそれほどでは無いとおもいますが、対象範囲は、どれ位あるのでしょうか? Wikipedia を見ると、文字コード でいやになる位あります。

あと、Unicode以前の多くの文字コードは、MSB=0 の時、Asciiと同じ。(EBDIC 等例外はあるが) ので、多くの場合、判定は難しいです。

投稿2018/09/07 12:25

pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2018/09/11 05:18

ご回答ありがとうございます。 なるほど。やはりUTF-8決めうちでやって、余裕ができれば...って形にします。
guest

0

ベストアンサー

UTF-8決めうちにしてしまうのも手だと思います。BOMがないときは文字コードを確実に決定することは不可能なので(経験的手法は誤爆があり得る)。vscodeがやっているように、あとから文字コードを指定するくらいでいいんじゃないでしょうか。

いい加減Shift-JISは滅べ。

投稿2018/09/07 09:01

yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2018/09/07 09:03

ご回答ありがとうございます。 やはりUTF-8決め打ちで、ユーザに任せたほうが無難ですかね。
guest

0

こんにちは。

WindowsではANSIコードをShift-JISコードの意味で使っている場所があるそうですが、これは誤りでANSIはASCIIのことですから、UTF-8と互換性があります。(入り混じっても問題ない。)
ですので、ASCIIとUTF-8だけであることが判っているならUTF-8指定すればOKです。

Shift-JISなどのファイルも混じっている場合は、経験的な手法で文字コードの推測を試みることになります。(BOMがついていれば確実ですが、Shift-JIS等にBOMはないです。)

Qtはどうも ICU を内蔵しているようです。
これを呼び出すことができれば、ICU の文字コード判定機能を使うのも一つと思います。(多くの場合、推測になるので誤判定もそれなりにある筈ですが、いかんともし難いです。)

投稿2018/09/07 03:34

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2018/09/07 09:04

ご回答ありがとうございます。 やはりめんどくさいんですね...(手法が) 時間があき次第、バイナリエディタかなんかでチェックしてみますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問