問題タブ [wofstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 活版印刷のアポストロフィ+ワイド文字列リテラルが私のwofstreamを壊しました(C ++)
タイプライターのアポストロフィ(')ではなく、不吉な活版印刷のアポストロフィ(')を処理するときに、奇妙な動作に遭遇しました。ワイド文字列リテラルとともに使用されるアポストロフィは、wofstreamを中断します。
このコードは機能します
==> A'B
このコードは機能します
==> A'B
このコードは失敗します
==> A
このコードは失敗します...
==> A
何か案が ?
c++ - C++ユニコードの質問
私はICUとコードプロジェクトのutf8のような小さなライブラリを知っています(正確な名前を忘れてください)が、これらのどれも私が望むものではありません。
私が本当に欲しいのはICUのようなものですが、より親しみやすい方法でまとめられています。
具体的には:
- 完全なオブジェクト指向
- c ++標準ストリームの実装、または少なくとも同じ役割を果たすもの。
- ロケールに依存する方法で時刻や日付などをフォーマットできます(たとえば、英国ではdd / mm / yy、米国ではmm / dd / yy)。
- 文字列の「内部」エンコーディングを選択できるので、たとえば、Windows APIおよびDirectXとの間で文字列をやり取りするときに、多くの変換を回避するために、WindowsでUTF-16を使用するようにすることができます。
- エンコーディング間での文字列の簡単な変換
そのようなライブラリが存在しない場合、標準のc ++クラスを使用してICUをラップすることは可能ですか。たとえば、std::stringおよびstd::wstringと同じ使用法を持つustringを作成し、ストリームのバージョンを実装することもできます。 (最適には、既存のものと完全に互換性があります。つまり、std :: ostreamを期待する関数に渡すことができ、内部形式とascii(またはutf-8)の間の変換をオンザフライで実行します)?どれだけの作業が可能だとしたら?
編集:c ++ 0x標準を見て、utf8、utf16、utf32のリテラルに気づいたことは、標準ライブラリ(文字列、ストリームなど)がこれらのエンコーディングとそれらの間の変換を完全にサポートすることを意味しますか?もしそうなら、誰かがVisual Studioがそれらの機能をサポートするまでにどれくらいの時間がかかるかについて何か考えを持っていますか?
EDIT2:既存のc ++サポートの使用に関しては、ロケールとファセットのものを調べます。
私が遭遇した問題の1つは、ファイルI / Oのウィンドウの下で2バイトであるwchar_tの周りに定義されたストリームを使用する場合、ファイル自体にASCIIを使用しているように見えることです。
結果として、ファイルに次の16進数が含まれます
48 65 6C 6C 6F 20 57 6F 72 6C 64 0D 0A
これは、予想されるutf-16出力ではなく明らかにASCIIです:
FF FE 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 72 00 6C 00 64 00 0D 00 0A 00
g++ - Windows での iostream、wifstream、および eclipse/g++
MinGW ツール チェーン (g++ など) を使用して Windows で Eclipse を使用しています。wifstreamとwofstreamを使用してファイルを読み書きするダーウィン上に構築したプログラムがあります。プログラムは、ダーウィン(Mac)でEclipseを使用して動作し、機能します...私の問題ではありません。
コードを Windows に移動し、MinGW ツール チェーンと Eclipse を使用してビルドしようとすると、wifstream、wofstream、および wcout でコンパイル エラーが発生します。wstring として定義された変数は問題なくコンパイルされます。
例えば:
wifstream inFile; inFile.open(argv[2], ios_base::in);
コンパイルエラーになる
..\src\pdConv.cpp:31: エラー: 「wifstream」はこのスコープで宣言されていません
これは、コンパイラが wifstream を変数と見なしていることを示しているようです。インクルード ファイルで _GLIBCXX_USE_WCHAR_T ディレクティブが有効になっていないことに気付きました。これを自分で定義する必要がありますか、それとも環境内の何かがこれを知っているはずですか? 手動で定義すると、同じプログラムでワイド実装とナロー実装の両方を使用できないようです。
これはおそらく明らかですが、私は長い間この問題に悩まされてきました...笑..ここで何が欠けていますか?
c++ - C ++のワイドファイルストリームがデフォルトで書き込まれたデータを狭めるのはなぜですか?
正直なところ、C++Standardライブラリでは次の設計上の決定は得られません。ワイド文字をファイルに書き込む場合、文字にwofstream
変換wchar_t
されchar
ます。
私はこれが標準と関係があることを知っていますcodecvt
。codecvt
にありutf8
ますBoost
。また、ここSOにはMartinYorkによるcodecvt
forがあります。問題は、なぜワイド文字を変換するのかということです。そのまま文字を書いてみませんか!utf16
standard codecvt
また、C ++ 0xで現実になるのでしょうunicode streams
か、それともここで何かが足りないのでしょうか。
c++ - std::wofstream が ansi を書き込むのはなぜですか?
ワイド文字列があり、それを out|binary モードで開いた wofstream に書き込んでいます。結果のファイルを見ると、1 バイトおきに欠落しています。
バイナリ エディターを使用してビジュアル スタジオでファイルを開くと、1 バイトおきにゼロが表示されることを期待していましたが、ゼロが表示されません。
私が欠けているものを知っていますか?
ありがとう。
コードは次のようなものです。
c++ - Windows で wofstream を使用する UTF-16 エンコーディングのタイプ
最近、WindowsでテキストファイルをUnicode(UTF-16)で書きたいと思っています。
http://www.codeproject.com/KB/stl/upgradingstlappstounicode.aspxを参照すると、ここに適用するコードがあります。
メモ帳を使ってドキュメントを開くと、次のように表示されます。改行が消えるようです!!!
(出典: google.com )
UTF-16 エンコーディングを選択して Firefox を使用すると、次のように表示されます。
(出典: google.com )
次のエンコーディングを使用して、JEditで開こうとしました
- UTF-16 - いいえ。ゴミ表示。
- UTF-16BE - いいえ。ゴミ表示。
- UTF-16LE - 結構です。複数の行を表示できます。
私の推測では、追加のバイト順情報を提供する必要がありますか? しかし、どのように?
私の目的は、この UTF-16 ドキュメントをメモ帳の下で適切に表示できるようにすることです。私の顧客はメモ帳を使用するのが大好きです。
追伸お願いします!UTF-8 の使用を提案しないでください。ありがとうございました。
c++ - ランタイム チェックの失敗 #2 C/C++
プログラムで問題が発生し、やや困惑しました。私は正常に動作していたプログラムを持っていました (VS 2010 では正常に動作していましたが、.NET にアップグレードしたのではなく、このエラーが発生し始めました) ほとんどが c であり、いくつかの c++ であるプログラム (私の上司はそれ以来、オブジェクト指向を嫌っています)通常、彼が偏執狂的なマイクロソフトのライブラリへの呼び出しを行う必要があり、それらの多くは政府のものであるため、問題になる可能性のある古いバージョンがある場合は顧客に配信する必要があり、これらの呼び出しが原因であると彼は考えています不必要なオーバーヘッドなので、可能な限り回避する必要があります) 次に、コード ブロックのコメントを外し (コメントを外した元のブロックからいくつか変更されているため、このブロックを少し下に投稿します)、作業を開始し、エラー "
あまり良くない修正をいくつか実装することで、問題が何であるかを理解しようとしました.1つが機能する場合、実際の問題が何であるかがわかり、デバッグのための適切な出発点が得られるからです. 最初に、stdのサイズを大きくして、処理できるよりも大きな文字列を入れないようにしました(値は、リストビューから3つ以下の列から取得されますが、それぞれはできません80 文字を超える必要があります)、これによりエラーが発生する頻度が減りましたが、それでもエラーが発生しました。
そのため、そのコード ブロックの std を msg (当時の std とまったく同じ) に切り替えて、msg が同じエラー (そのコード ブロックによって生成されたことを意味します) を取得したかどうかを確認しましたが、エラーは引き続き発生しました。約std。
これは、おそらくstdの周りのカナリアを上書きする他の変数であると思ったので、そのすべてのインスタンスをmsgに置き換えた後、コメントアウトしました(取得されていない関数へのローカル変数である場合はexecpt)エラーが発生したときにまだ呼び出されています) が、これにより msg の周りにエラーが表示されました (実際には、関数のローカル変数としても表示されます)。
次に、static を使用して、スタックではなくヒープで msg を宣言しようとしましたが (new を使用すると上司が非常に嫌いな最新のコードを使用するため)、次のエラーが発生するだけでした:アクセス違反読み取り場所 0x00300030." 場所 0x00300030 は、私が制御できない外部 API への呼び出しです。
コードの他の部分に無関係な変更を加えた後、std と msg の周りで同時に (関数呼び出しの後と前に) ランダムにスタック エラーを取得します。ブレークポイントだけでは役に立たず、コールスタックも役に立たないので、この問題をデバッグする良い方法があるかどうか知りたいです (ただし、間違って使用している可能性があります)。
以下は、変数の宣言と、関数が呼び出される前に呼び出される唯一の場所です。
宣言:
およびその他の呼び出し:
アクセス違反があったのは PS ExternalAPIFunction1 でした。
c++ - ヘブライ語/アラビア語のファイルに wstring を書き込む際の問題
xerces パーサーを使用してヘブライ語 (ユニコード) を読みたいです。XMLCh で値を読み取ることができます。ただし、別のファイルに書き込んでいるときに、ガーガベ値が取得されます。ofstream、wofstream を使用してみましたが、役に立ちませんでした。
あなたの提案を教えてください
c++ - std::wofstream を使用してファイルに書き込みました。ファイルは空のままでした
VS2008 を使用して次のプログラムを作成しました。
コンパイルしようとすると、ソース ファイルを Unicode で保存するかどうかを IDE が尋ねてきたので、「はい、どうぞ」と答えました。
次に、プログラムを実行すると、プロジェクトのフォルダーに myfile が表示されました。メモ帳で開いたところ、ファイルが空でした。メモ帳は ASCII データのみをサポートしていたことを思い出しました。ワードパッドで開きましたが、まだ空でした。最後に、私の中の小さな天才がファイル サイズを確認するように促しました。驚くことではありませんが、ファイル サイズは 0 バイトでした。そのため、プログラムを再構築して再実行しましたが、効果はありませんでした。最後に、私が欠けているものについて、StackOverflow の非常に知的な人々に尋ねることにしました。ここにいます :)
編集:
上記の知的な人々がコメントを残した後、私は彼らのアドバイスに従い、プログラムを次のように書き直すことにしました。
それを構築しました。実行しました。そして...コンソールには、驚いたことに、「後:良くない...」とはっきりと表示されました。そこで、投稿を編集して新しい情報を提供し、その理由と私に何ができるかを説明する回答を待ち始めました. :)
c++ - std :: wstringをファイルに移植可能に書き込む方法は?
私はそのwstring
ように宣言しました:
私のソースファイルはであるため、リテラルはUTF-8でエンコードされます。
[編集:Mark Ransomによると、これは必ずしも当てはまるわけではなく、コンパイラが使用するエンコーディングを決定します。代わりに、UTF-8などでエンコードされたファイルからこの文字列を読み取ったと仮定します]
これをファイルの読み取りに取り入れたいと思います(テキストエディタが正しいエンコーディングに設定されている場合)
しかし、ofstream
あまり協力的ではなく(wstring
パラメータを取ることを拒否します)、wofstream
おそらくロケールとエンコーディング設定を知る必要があります。このバイトセットを出力したいだけです。通常、これをどのように行いますか?
編集:クロスプラットフォームである必要があり、UTF-8であるエンコーディングに依存しないでください。たまたまにバイトのセットが格納されていてwstring
、それらを出力したいと思っています。それはUTF-16またはプレーンASCIIである可能性が非常に高いです。