C ++のstd :: stringはエンコード形式ですか?

3
xuwang 2019-10-29 11:53.

std :: stringに関するデフォルトのエンコード形式を見つけたい。
エンコード形式を調べようとしていますが、わかりません。c ++のstd ::文字列はエンコード形式ですか?

2 answers

5
Amir Kirsh 2019-10-31 01:12.

簡単な答え

std::stringこれは、charのコレクションであることstd::basic_string<char>を意味するものとして定義されています。charのコレクションとして、utf8文字列のエンコードされた結果であるcharを保持できる可能性があります。

次のコードはC ++ 20まで有効です。

std::string s = u8"1 שלום Hello";
std::cout << s << std::endl;

そして、それをサポートするコンソールで、を印刷します。

1שלוםこんにちは

u8括弧で囲まれた文字列の前は、次の括弧で囲まれた文字列にutf8エンコーディングがあることをコンパイラに通知するための文字列リテラルですutf8

u8プレフィックス表記がないと、コンパイラはコンパイラのソースエンコーディングに基づいて文字列を取得するため、デフォルトのエンコーディングまたはコンパイラに明示的に設定されたエンコーディングが文字列の文字をサポートしている場合は、次のように取得できます。

std::string s = "1 שלום Hello";
std::cout << s << std::endl;

同じ出力上記のように。ただし、これはプラットフォームとコンパイラに依存します。

コンパイラのソースエンコーディングがこれらの文字をサポートしていない場合、たとえばgccでソースエンコーディングをフラグ付きのLATINに設定している場合、プレフィックスの-fexec-charset=ISO-8859-1ない文字列は次のコンパイルエラーを返します。u8

converting to execution character set:
Invalid or incomplete multibyte or wide character 
    std::string s = "1 שלום Hello";
                     ^~~~~~~~~~~~~~

C ++ 20の u8括弧で囲まれた文字列は、次のように変換できないためstd::string

std::string s = u8"1 שלום Hello";
std::cout << s << std::endl;

C ++ 20で次のコンパイルエラーが発生します。

conversion from 'const char8_t [17]' to non-scalar type 'std::string'
{aka 'std::__cxx11::basic_string<char>'} requested
    std::string s = u8"1 שלום Hello";
                    ^~~~~~~~~~~~~~~~~

これはu8、C ++ 20の括弧で囲まれた文字列のタイプconst char[SIZE]がそうではなく、むしろconst char8_t[SIZE](タイプchar8_tがC ++ 20で導入された)ためです。

あなたは使用することができますC ++ 20の新しいタイプでしかしstd::u8string

std::u8string s = u8"1 שלום Hello"; // good - std::u8string added in C++20
// std::cout << s << std::endl; // oops, std::ostream doesn't support u8string

いくつかの興味深いメモ:

  1. C ++ 20までu8括弧で囲まれた文字列はconst char[SIZE]
  2. C ++ 20以降u8括弧で囲まれた文字列はconst char8_t[SIZE]
  3. サイズのはchar8_t同じであるcharそれは異なるタイプであります

長い話

エンコーディングはC ++では悲しい話です。これがおそらくあなたの質問に対する「簡単な答え」がない理由です。文字エンコードを処理するための本格的なエンドツーエンドの標準ソリューションはまだありません。stdコンバーター、サードパーティライブラリなどがあります。しかし、実際のタイトでシンプルなソリューションではありません。うまくいけば、C ++ 23がこれを解決するでしょう。

JeanHeydMeneideによるこのテーマに関するCppCon2019セッションを参照してください

また、関連する質問:std :: u8stringはstd :: stringとどのように異なりますか?

0
Tom Honermann 2019-11-02 23:05.

std::stringはのコンテナでcharあり、特定のエンコーディングを強制するものはありません。ロケールに依存する文字セットに従ってエンコードされたテキストを保持するために使用するプログラマーもいれば、UTF-8またはその他のエンコードとしてエンコードされたテキストを保持するために使用するプログラマーもいます。ロケールに依存する文字セットは、"C"デフォルトでロケールに関連付けられている文字セットですが、を呼び出すことで変更できますstd::setlocale。呼び出しは、std::setlocale(LC_CTYPE, "")システム定義されているロケール(で示されているように応じて、ロケール文字セットを設定しますLANGLC_ALLまたはLC_CTYPEPOSIXシステム上、またはActiveコードページ(ACP)により、Windows上の環境変数)。これらのロケール設定は、主に文字分類関数など、いくつかのCおよびC ++インターフェイスの動作に影響を与えます。

POSIXシステムでは、のような呼び出しを使用して、ロケールに依存する文字エンコードの名前を照会できますnl_langinfo(CODESET)。Windowsでは、を呼び出すことでACPを照会できますgetACP()

追加情報(ドキュメントまたはその他の帯域外データ)が異なるエンコードを示していない限り、std::stringコンテンツがロケール設定に従ってエンコードされていると想定することをお勧めします。

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする&nbsp;

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

2021 年 6 月 8 日にニューヨーク市で開催された covid-19 パンデミックで亡くなった人々の命を偲び、祝うために、ネーミング ザ ロスト メモリアルズが主催するイベントと行進の最中に、グリーンウッド墓地の正門から記念碑がぶら下がっています。週末、ジョー・バイデン大統領は、covid-19 パンデミックの終息を宣言しました。これは、過去 2 年以上にわたり、公の場でそうするための長い列の中で最新のものです。

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

オハイオ州のエミリー・デシャネル みんな早く来て、ボーンズが帰ってきた!まあ、ショーボーンズではなく、彼女を演じた俳優. エミリー・デシャネルに最後に会ってからしばらく経ちました.Emily Deschanel は、長期にわたるプロシージャルな Bones の Temperance “Bones” Brennan としてよく知られています。

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

どうやら、ドナルド・トランプに近い人々は、今月初めにFBIによって家宅捜索された彼のMar-a-Lago財産からの映像を公開するよう彼に勧めています. 前大統領はテープを公開するかどうかを確認していませんが、息子はフォックス・ニュースにそうなるだろうと語った.

Andor は、他の Star Wars ショーから大きな距離を置きます。

Andor は、他の Star Wars ショーから大きな距離を置きます。

アンドールの一場面。数十年前、ジョージ・ルーカスがスター・ウォーズのテレビ番組を制作するのを妨げた主な理由は、お金でした。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language