1

私は iconv C API を使用しており、iconv でコンピューターのローカル エンコーディングを検出したいと考えています。それは可能ですか?ソース コードを調べると、ファイルiconv_open1.hで、fromcodeまたはtocode変数が空の文字列 ( ) の場合、関数呼び出し""を使用してローカル エンコーディングが使用されていることがわかります。locale_charset()

ロケールエンコーディングをユニコードに変換するために必要なのは、iconv_open ("UTF-8", "")

残念ながら、ドキュメントにはこれについての言及はありません。

また、一部の iso-8859-1 テキストをロケール エンコーディング (私のマシンでは utf-8) に変換すると、変換中に errno=EILSEQ (不正なシーケンス) が発生します。チェックしたところ、iconv_open はエラーを返しませんでした。

の空の文字列の代わりにiconv_openを指定する"utf-8"と、エラーは発生しません。明らかに、iconv は現在の文字セットを検出できませんでした。

編集:私は簡単なCプログラムでチェックしましたputs(nl_langinfo(CODESET))ANSI_X3.4-1968これはASCIIです)。どうやら、文字セットの検出に問題がありました。

編集: これは、なぜ nl_langinfo(CODESET) がロケールのチャームマップと異なるのですか?に関連している必要があります。

追加情報: 私のプログラムは Ada で書かれており、リンク時に C 関数にバインドしています。どうやら、ロケール設定は、Ada ランタイムと C ランタイムで同じように初期化されていません。

4

1 に答える 1

1

なぜ nl_langinfo(CODESET) が locale charmap と異なるのですか?と同じ答えをとります。

最初に電話する必要があります

setlocale(LC_ALL, "");
于 2012-06-12T09:55:26.730 に答える