2009-09-14 14 views

答えて

9

、あなた自身が見つかったルールを使用してエンコーディングを生成する必要があり、例えば、here。たとえば、ドイツ語の鋭い文字(ß、コードポイント0xdf)は、UTF8エンコード0xc3,0x9fを持っています。 e-acute(É、code point 0xe9)のUTF8エンコーディングは0xc3,0xa9です。

そして、あなたがあなたの文字列内の任意の進文字を入れることができます:あなたが使用することができC99コンパイラを使用している場合

char *cv = "r\xc3\xa9sum\xc3\xa9"; 
char *sharpS = "\xc3\x9f"; 
+0

\ xHEX表記は私が探していたものです。ありがとうございます。 –

+0

変数がUTF-16を保持するのに十分な幅であれば、\ x00e9と言うことができますか? –

1

wchar_tのは、あなたが探しているタイプであると言いたい:UTF8の場合http://opengroup.org/onlinepubs/007908799/xsh/wchar.h.html

+0

$ /usr/bin/gcc -std=c99 -pedantic -Wall wc.c

なぜなら質問にunixタグはなかったからです。 – paxdiablo

+0

私はCでASCIIテキストでéを描画する方法にもっと興味があります。Perlでは '" \ x {e9} "'と言ってやることができます。問題は、ソースがASCIIであることですが、UTF-8文字を作成する必要があります。 –

+0

@Chas:なぜソースファイルのエンコーディングとしてUTF-8を使用しないのですか?ほとんどのコンパイラは、マルチバイトシーケンスが文字列リテラルの内部でのみ発生する限り、それに問題はないはずです... – Christoph

5

<プロトタイプがwchar.h >(および< locale.hに>)とUnicodeのコードを入力してくださいソースを直接指します。ただ、それは* UNIX *仕様(SUS)、私はそれを持ち出すISO Cの一部ではないということを覚えておいてください

$ cat wc.c

#include <locale.h> 
#include <stdio.h> 
#include <wchar.h> 

int main(void) { 
    const wchar_t *name = L"r\u00e9sum\u00e9"; 
    setlocale(LC_CTYPE, "en_US.UTF-8"); 
    wprintf(L"name is %ls\n", name); 
    return 0; 
} 

$ ./a.out

name is résumé 
+0

上記のコードは機能しますが、 'wchar_t'は複数のロケールを必ずしも一度に表現できるわけではありません。それは、現在のロケールをサポートするのに十分なだけでなければなりません。 –

関連する問題