2010-04-11 4 views
0

Во-первых, это не дубликат: Turn a C string with NULL bytes into a char array, потому что данный ответ не работает, когда char * являются Unicode.Разделение нулевого байта Разделение строки UNICODE C

Я думаю, проблема в том, что я пытаюсь использовать кодированные символы UTF-8 вместо ASCII char *, а длина каждого символа отличается и, следовательно, это не работает:

char *Buffer;    // your null-separated strings 
char *Current;   // Pointer to the current string 
// [...] 
for (Current = Buffer; *Current; Current += strlen(Current) + 1) 
    printf("GetOpenFileName returned: %s\n", Current); 

Есть ли у кого-нибудь подобное решение, которое работает в строках Unicode?

Я уже четыре часа стучаю головой об этом. C не согласен со мной.

EDIT: Я думаю, что проблема заключается в том, что символ * теперь UTF-8, а не ASCII.

+0

Что значит «Unicode», UTF-16? –

+0

Я не уверен. Я получаю этот так называемый «Юникод» от этой функции: http://pastebin.com/j1pFrWPa. Название функции означает UTF-8 char *, но это меня смущает. –

+0

Я пытаюсь сделать мою программу дружественной к тем не-ASCII буквам (акценты, русский и т. Д.), Но мне все еще нужно иметь сборщик файлов. –

ответ

2

Не использовать char*. Используйте wchar_t* и соответствующие функции

wchar_t *Buffer;    // your null-separated strings 
wchar_t *Current;   // Pointer to the current string 
// [...] 
for (Current = Buffer; *Current; Current += wstrlen(Current) + 1) 
    wprintf(L"GetOpenFileName returned: %s\n", Current); 

Кстати, wchar_t 16 бит на окнах, не переменной ширины. Если ваши исходные данные кодируются UTF8 как char*, вы должны сначала преобразовать его в wchar_t* для работы с ним.

+0

Я пробовал это. Я выбираю файл H: \ files.txt, и это результат: http://pastebin.com/s9vJYiFp –

+0

Как его преобразовать из UTF-8 char * в wchar_t *? –

+0

Если я оставлю все одинаковым (просто используя символ UTF-8), я получаю только первый результат ('H: \'), а не 'H: \' и 'files.txt', как я ожидаю. –