これはANSI Cの問題です。私は次のコードを持っています。wchar_tとwint_t
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main()
{
if (!setlocale(LC_CTYPE, "")) {
printf("Can't set the specified locale! "
"Check LANG, LC_CTYPE, LC_ALL.\n");
return -1;
}
wint_t c;
while((c=getwc(stdin))!=WEOF)
{
printf("%lc",c);
}
return 0;
}
完全なUTF-8サポートが必要ですが、この最も単純なレベルでも、これを何とか改善できますか?適切な変更を加えたwchar
ではなく、wint_t
が使用されるのはなぜですか?
UTF-8文字の長さは4バイトで、技術的には5バイトまたは6バイトを取ることもできますが、このような構成は有効なutf8文字ではありません。 – quinmars
まあ、本当です。 0x10000以上の余分なプラン文字に入ると4バイト長になる可能性がありますが、UTF-16を扱う際には代理人になります。質問の範囲外だと思っていました。 5バイトまたは6バイトのシーケンスは可能ですが、5バイト未満で表現でき、品質の低いシリアライザによってのみ生成されます。 – lavinio
あなたの答えはほぼ正しいですが、あなたはあまりにも多くの(platofrm depenent)詳細を提供しています。 'wchar_t'は常に16ビットではありませんが、少なくとも2つのOS /コンパイラの組み合わせを32と考えることができます。 –