Bruce.です。
FreeBSD/Mac OS X/Fedora Core 3 以外のGNU/Linux
で↓のプログラムの出力結果がどうなるか確かめてもらえませんか?
Fedora Core 3で試したら楽しいことになったんですが。
#Localeごとのキャラクタ照合順序のデータベースってどこにあるの?
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#ifndef CMPFUNC
#define CMPFUNC wcscoll
#endif
int
main()
{
#define ARYNUM 5
unsigned char *str[ARYNUM] = {
"\xb1", /* HALFWIDTH KATAKANA LETTER A in SJIS */
"\xb2", /* HALFWIDTH KATAKANA LETTER I in SJIS */
"\xb3", /* HALFWIDTH KATAKANA LETTER U in SJIS */
"\xb4", /* HALFWIDTH KATAKANA LETTER E in SJIS */
"\xb5", /* HALFWIDTH KATAKANA LETTER O in SJIS */
};
wchar_t *wstr[ARYNUM];
int i;
#ifndef _WIN32
setlocale(LC_ALL, "ja_JP.SJIS");
#else
setlocale(LC_ALL, "japanese.japan");
#endif
for (i=0; i<ARYNUM; i++)
wstr[i]=calloc(sizeof (wchar_t)*2, 1);
for (i=0; i<ARYNUM; i++)
mbrtowc(wstr[i], str[i], strlen(str[i]), NULL);
printf("before sort\n");
for (i=0; i<ARYNUM; i++)
printf("%x\n", wstr[i][0]);
qsort(wstr, ARYNUM, sizeof (wchar_t*), (int (*)(const void*, const
void*))CMPFUNC);
printf("\nafter sort\n");
for (i=0; i<ARYNUM; i++)
printf("%x\n", wstr[i][0]);
return 0;
}
いじょ。