サーチ…


備考

C ++言語は文字セットを指定しません。また、UTF-8やUTF-16の使用をサポートするコンパイラもあります。しかし、単純なANSI / ASCII文字以外のものが提供されることは確実ではありません。

したがって、すべての国際化言語サポートは実装定義されており、使用しているプラ​​ットフォーム、オペレーティングシステム、コンパイラに依存しています。

プラットフォームの国際的なサポートを拡大するために使用できるいくつかの第三者図書館(国際Unicode委員会図書館など)。

C ++文字列の特性について

#include <iostream>
#include <string>

int main()
{
    const char * C_String = "This is a line of text w";
    const char * C_Problem_String = "This is a line of text ኚ";
    std::string Std_String("This is a second line of text w");
    std::string Std_Problem_String("This is a second line of ϯϵxϯ ኚ");

    std::cout << "String Length: " << Std_String.length() << '\n';
    std::cout << "String Length: " << Std_Problem_String.length() << '\n';

    std::cout << "CString Length: " << strlen(C_String) << '\n';
    std::cout << "CString Length: " << strlen(C_Problem_String) << '\n';
    return 0;
}

プラットフォーム(Windows、OSXなど)およびコンパイラ(GCC、MSVCなど)によっては、このプログラムがコンパイル、異なる値の表示、または同じ値の表示に失敗することがあります

Microsoft MSVCコンパイラの出力例:

文字列の長さ:31
文字列の長さ:31
CStringの長さ:24
CStringの長さ:24

これは、MSVCでは、使用される各拡張文字が単一の「文字」とみなされ、このプラットフォームは国際化言語を完全にサポートすることを示しています。
しかし、この動作は普通ではないことに注意してください。これらの国際文字はUnicodeとして内部的に格納されているため、実際には数バイトの長さです。 予期しないエラーが発生することがあります

GNC / GCCコンパイラでは、プログラムの出力は次のようになります。

文字列の長さ:31
文字列の長さ:36
CStringの長さ:24
CStringの長さ:26

この例は、この(Linux)プラットフォームで使用されているGCCコンパイラがこれらの拡張文字をサポートしているが、個々の文字を格納するために( 正しく)いくつかのバイトも使用することを示している。
この場合、Unicode文字の使用が可能ですが、このシナリオでの "文字列"の長さは読み込み可能な文字の長さではなくバイト数であることを覚えておく必要があります。

これらの違いは、国際的な言語がプラットフォームごとにどのように処理されるか、さらに重要なことですが、この例で使用されるCおよびC ++文字列はバイト配列と見なすことができるため、C ++言語では文字(char)を1バイトにする



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow