2009-05-28 11 views
4

libcで期待される文字エンコードは何ですか?たとえば、gethostname(char name、size_t namelen);引数としてcharをとります。 nameパラメータはutf8(asciiを元のままにしておく)またはplain asciiまたは他の形式でエンコードすることが期待されていますか?libcの文字エンコーディング?

また、Cは任意の文字コード体系を必須としていますか?

答えて

2

すべての文字列関数(widecharを除く)はネイティブcharsetのみをサポートします。 Unix/Linux/WindowsではASCII、IBMメインフレーム/ミッドレンジコンピュータではEBCDICです。

+0

英語以外の環境でこれらの機能を使用するにはどうすればよいですか? – chappar

+0

また、libcにはすべてのchar *関数に相当するwchar_t *がないと思います。 – chappar

+0

自分で変換するか、仕事をするためのライブラリを入手する必要があります - 詳細はこちら:http://stackoverflow.com/questions/313555/light-c-unicode-library とにかくUTF-8でホスト名を付けることはできませんか? – qrdl

1
  • charはASCIIを使用しています
  • のwchar_tはUnicodeの

使用し、ワイド文字に対応するための標準的なCデータ型です。

+0

wchar_tにはどのようなエンコーディングが使用されていますか?それはUCS2かutf16ですか? – chappar

+0

@chappar:実装定義です。 –

+0

実装定義ですか?アプリケーション定義と思ったのですか?同じOS上で同じコンパイラでコンパイルされた2つのアプリケーションには、異なるエンコーディングを使用する権利があります。 – bortzmeyer

0

charは、7ビット互換のASCIIエンコーディングでなければなりません(ただし、これについては明確な参照が見つかりません)。 definition of wchar_t is left to the implementationですが、C標準ではC portable characterの文字を同じにする必要があります。これを正しく理解すると、

char a = 'a'; 
wchar_t aw = L'a'; 
if (a == (char)aw) { 
    // should be true 
} 

標準ではUTF-8については何も言われていません。

+0

ASCIIは必須ではなく、実装でもEBCDICを使用できます。 –

0

おそらく、GLibなどのサードパーティのライブラリを使用する必要があります。 このlibはポータブルで非常に便利で、正規表現、データ構造なども提供しています。

+0

なぜdownvote? –

+0

答えが役に立たなかったためでしょう。 GLibはこの場合どのように役立つでしょうか? – JesperE

+0

なぜ誰かがこれを落としたのか分かりません。 – chappar