No.6ベストアンサー
- 回答日時:
#5です。
>UTF-8で読み込んだファイルの中身を半角を1バイト、全角を2バイトとしてバイト数を計算したいのです。
ですから、なんのためにそんな計算がしたいのか、ということです。
そもそも、半角/全角というのはSJIS固有の概念といってもいいです。
なので、SJISに変換するのでない限り、意味の無い計算です。
#細かいことを言うと、unicodeにも、半角/全角という言葉は出てきますが、意味が違います。
UFT-8には、SJISには存在しない文字がありますから、変換してしまうと、情報が落ちてしまいます。それは構わないのでしょうか?
情報が落ちて困るのなら、SJISに変換はできませんし、そうなると、半角/全角といった話も不要です。どうなのでしょうか。
この回答への補足
なんどもありがとうございます。
UTF-8で書かれた1G越えのファイルを開き、中身を取得したいと思っております。
中身が1Gを超えるので一度に展開できず、数回に分けて取得しようと考えております。
1回に取得するサイズを決めて中身を取り出し、次に取得する場合は1回目に取得した次のデータから取得したいのですが、うまくバイト数を取得できずデータが切れてしまっているのが現状です。
その計算に必要なバイトを取得したいと考えております。
No.10
- 回答日時:
#3です。
補足ありがとうございます。別枠で質問したのはいい判断だと思います。
しかし、知りたいバイト数とは一体何なのでしょうか。半角文字1バイト、全角文字2バイトだとすると、SJISですか?
開いているファイルはUTF-8ですよね。本当にSJISのバイト数でいいのですか?
また、念のため明記しますが、UTF-8のバイト数とSJISのバイト数は違うものになります。
補足をよろしくお願いします。
返信が遅れ申し訳ありません。
自分の知識不足から自分のやりたい事と質問内容がずれてきているように思えます。
一度整理して改めて質問させていただきます。
ご回答くださいました方々ありがとうございました。
No.8
- 回答日時:
#6です。
>http://okwave.jp/qa4406429.html
こちらの質問の続きだとしますと、
FILE *file1;
wchar_t s[256];
file1 = fopen( "C:\\readme", "r, ccs=UTF-8");
while (fgetws(s, 256, file1) != NULL)
{
:
:
}
といった感じで前回の続きから文字を読んでこれます。これではなにか問題があるのでしょうか?
No.5
- 回答日時:
#4です。
>質問の通りにバイト数を取得したのです。
ワイド文字でのバイト数であれば、
(wcslen(s)+1)*2
です。これ以外はありえません。
全角、半角と言い出した時点ですでにワイド文字の話ではなくなるのです。
なので、「何での」バイト数が必要なのかが肝心なのです。
SJISでのバイト数が必要ならば、MBCSに変換するのが有効ですし、そうでないならば、また別の方法が必要となることでしょう。
この回答への補足
勉強不足ですみません。
UTF-8で読み込んだファイルの中身を半角を1バイト、全角を2バイトとしてバイト数を計算したいのです。
UTF-8のファイルを開くにはワイド文字で取得するしかないようなので、一旦ワイド文字で取得 -> 計算の流れを考えております。
他方法があればご教授ください。
No.4
- 回答日時:
>バイト数に関してですが、「abcあいう」だった場合は9バイトとしてカウントしたいのです。
>ただ、半角は1バイト、全角は2バイトとして計算したいので、他の方法を考えてみます。
ワイド文字は全角半角かかわらず、一文字2バイトです。
なので、1バイトとして計算したい文字と、2バイトとして計算したい文字とを自分で定義して、自分で計算するしかないですね。
っていうか、そんな自分で計算した値を使って、いったいなにがしたいのでしょうか?
もし、SJISでのバイト数を計算したいのなら、ワイド文字からMBCSに変換するなどしてから、バイト数を数えるほうが確実だと思います。
質問の通りにバイト数を取得したのです。
ご提示していただいた方法だと仰るとおり現実的でなく、且つそれしか方法がないのであれば、既に関数化されていそうですね。
wcstombs()を使用すれば、ワイド文字からマルチバイトへの変換、マルチバイトのバイトすうの取得が出来るようですので、先ずはこちらで試してみます。
ありがとうございました。
No.3
- 回答日時:
とりあえずまだ誰も突っ込んでないのでひとつ。
error C2106: '=' : 左のオペランドが、左辺値になっていません。
QNo.4406429
からの続きでしょうか?
だとすれば、ひょっとして知りたいのはUTF-8のときのバイト数でしょうか?
もしそうなら、この質問だけではそんなこと分かりませんので、補足をお願いいたします。
(QNo.4406429の質問を見ていれば分からないこともないですが、検索で表示した場合は意味不明になりますし、質問者の名前を確認しない場合もあります。またページの切れ目で気づかないとかあるので、注意してください)
ところで、ワイド文字についての知識は十分でしょうか?
前回の質問の内容からあてずっぽうでコードを書いていませんか?
この回答への補足
エラーの件失礼しました。
QNo.4406429と同じ質問者です。
一つの枠に2つ以上の質問を書くのも解りづらいと思い別立てで質問させていただきました。
QNo.4406429の事を補足しますと、UTF-8で書かれたファイルをchar型で取得できず、エラーとなるといった質問でした。
こちらに関してはワイド文字列しか取得との回答を頂き解決しております。
ワイド文字に関する知識は充分とはいえない状況です。
自分なりに調べながら質問させていただいております。
No.2
- 回答日時:
ワイド文字は大抵1文字2バイトです。
いわゆる全角文字・半角文字関係なく。
(サロゲートペアの文字は2バイト*2)
Shift_JIS(=CP932)であるときは、たまたま1バイト文字に半角文字と呼ばれるものが、
2バイト文字に全角文字と呼ばれるものが当てはまっていただけです。
このようなルールでよいのであれば、対象の文字列からShift_JISの1バイト文字以外の文字数分プラスすればいいです。
(Unicode→Shift_JISは情報がおちる可能性があるためやらないほうが無難。)
ありがとうございます。
つまりwcslen() * 2 +1 で計算出来るということですね。
ただ、半角は1バイト、全角は2バイトとして計算したいので、他の方法を考えてみます。
No.1
- 回答日時:
単にワイド文字のバイト数を知りたいだけであれば、sizeof(wchar_t)とするだけです。
ワイド文字列のバイト数であれば、バイト数の数え方をまず定義してください。
すなわち、配列のバイト数なのか、ナルワイド文字を含まない文字列を構成するバイト数なのか、ナルワイド文字を含んだ文字列を構成するバイト数なのかです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
【お題】 『寿司』がテーマの本のタイトルを考えてください
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
関数の実体定義にヘッダファイルの2重定義防止方法が効かない?
C言語・C++・C#
-
-
4
■文字コード判定■
C言語・C++・C#
-
5
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
6
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
7
C++初心者です。 debug assertion errorについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
SQLで1バイト、2バイト混在...
-
機種依存文字をチェックしたい。
-
エクセルシート名の制限を変更...
-
BCB5 日本語の1バイト目のチェック
-
「1TB」のHDDに日本語は何字入...
-
数値をKBやMBの単位に変換
-
URLは最高何文字まで可能なので...
-
UTF-8で5~6バイトになる文字コ...
-
ビットスワップとバイトスワッ...
-
char str[256]の256の意味は?
-
2バイト文字(いわゆる日本語)の...
-
ワイド文字のバイト数が取得で...
-
Javaで日本語1文字のバイト数
-
半長音(ー)及び半角文字を1バ...
-
memcmp バイナリデータの比較方法
-
Visual Basicでパック10進(2進...
-
VBAでShift-JISのURLエンコード
-
ピクセル,dpiから容量(バイト...
-
VBAでUnicodeしか存在しない文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
機種依存文字をチェックしたい。
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
SQLで1バイト、2バイト混在...
-
「1TB」のHDDに日本語は何字入...
-
64bit対応
-
VBAでShift-JISのURLエンコード
-
Javaで日本語1文字のバイト数
-
ビットスワップとバイトスワッ...
-
3バイト文字(UTF-8)をprintfで...
-
【VB2005】テキストボックス内...
-
バイナリとBCDコード
-
この関数はどのプログラミング...
-
URLは最高何文字まで可能なので...
-
VB.NET LeftBの代用
おすすめ情報