1

Mac Os X 10.6.8 では、これを解決するまで、標準ライブラリの wchar_t 関数を使用してコードをコンパイルできません。

wcscoll 関数とその他の関数:

inttypes.h :#pragma GCC ポイズン wcstoimax wcstoumax stdlib.h :#pragma GCC ポイズン mbstowcs mbtowc wcstombs wctomb wchar.h :#pragma GCC ポイズン fgetws fputwc fputws fwprintf fwscanf mbrtowc mbsnrtowcs >mbsrtowcs putwc putwchar swprintf swfscanf vfscanwprintf vsfscanwprintf vsfscanwprint wcrtomb wcscat wcschr wcscmp wcscoll wcscpy wcscspn wcsftime wcsftime wcslcat >wcslcpy wcslen wcsncat wcsncmp wcsncpy wcsnrtombs wcspbrk wcsrchr wcsrtombs wcsspn wcsstr >wcstod wcstof wcstok wcstol wcstold wcstoll wcstoul wcstoull wcswidth wcsxfrm wcwidth >wmemchr wmemcmp wmemcpy wmemmove wmemset wprintf wscanf

#include  <stdio.h>
#include <wchar.h>
#include  <string.h>
#include  <locale.h>
#include  <stdlib.h>
extern  int  errno; 
int main(void)
{
wchar_t  pwcs1[3]={L"ØL"}, pwcs2[3]={L"Ål"};
size_t   n;
(void)setlocale(LC_ALL,  "");

 /*    set it to zero for checking errors on wcscoll    */
 errno  =  0;
/*
 **    Let pwcs1 and pwcs2 be two wide character strings to
 **    compare.
 */
 /* n  =  wcscmp(pwcs1, pwcs2); */
 n  =  wcscoll(pwcs1, pwcs2); 
     /*
     **    If errno is set then it indicates some
     **    collation error.
     */
if (n < 0 ) {
    printf("%s\n","Øl mindre en Ål" );
} else if (n == 0) {
    printf("%s\n","Øl lik Ål" );
} else {
    printf("%s\n","Øl større en Ål" );
}

 if(errno  !=  0){
     /*  error has occurred... handle error ...*/
 }
}

これを解決するにはどうすればよいですか? 標準ライブラリをいじるのは少し気が進まない。しかし、Apple が修正していなければ、GNU C ライブラリをコンパイルできるのではないでしょうか? または、ワイド文字 (Utf-8) を処理するためのライブラリの中で、他の適切な代替手段はありますか。

古いものを移植しているので、本当に ncurses を使用する必要があり、ncurses を使用するにはワイド文字が必要です! :)

編集:私が理解しているように、標準のインクルードパスは /usr/include である必要があります。私が持っている SDK のインクルード ディレクトリを調べたところ、そこにあるヘッダー ファイルを grep すると、http://opensource.apple.com/tarballs/Libc/ の最新の tarball と同じように、同じ有害なプラグマが明らかになりました

編集++

後知恵で言えば、これらのプラグマには理由があり、代替手段を探していたので、今、ダウンロードしたばかりの glibc をビルドしようとしています。ヘッダーを調べましたが、「GCC ポイズン」プラグマはありません。

glibc の構成ファイルを少し読んだところ、これは簡単なオプションではないと思います。方法を理解するには、utf-8 で動作し、mac osX で ncurses を使用するものを分析する必要があると思います。

簡単な解決策を見落としているだけかもしれません。しかし、ncurses は 7 ビット ascii にフォールバックします。これが私の問題です。私の目標は、ncurses を使用しながら、utf-8 言語固有の文字をレンダリングすることです。フォーマットは索引付けの「専有」であるため、ソートできるようにする必要があります。レコードをソートするためのシステムコールをフォークすることはオプションではありません。また、ncurses を使用して、フィールド編集、表示からの文字の挿入および削除のために、何らかの文字列に含まれるコードポイントの数を知る必要があります。

ありがとう!

4

1 に答える 1

0

これまでのところ、ICU ライブラリは有望に見えます。私が知る限り、Mac Os X に同梱されている ICU ライブラリで解決策を追求すると思います。http://icu-project.org/apiref/icu4c/

于 2013-01-15T10:59:03.927 に答える