簡體   English   中英

打印UTF8字符串的每個字符

[英]Printing every character of a UTF8 string

我是字符串的Unicode / UTF8表示形式的新手。 我正在嘗試讀取UTF8編碼的文件,將其用空格分隔,然后在每個單詞中打印每個字符/代碼點(以空格分隔)。

我能夠使用wchar_t (我知道它內部使用utf16utf32 (?))從文件中讀取文本,進行打印並將其寫入另一個文件。 但是,我無法使用wchar_t來獲取子字符串或逐元素遍歷它。

為了解決這個問題,我使用了IBM的ICU庫。 碼:

while (fgetws(readString, 1000, wifile) != NULL) {
        wprintf(L"String: %s\n", readString);
        //split string on the base of spaces.
        wchar_t *nextToken = NULL;
        wchar_t *token = wcstok_s(readString, L" ", &nextToken);
        UChar *utf8Token = (UChar *)token;
        u_printf("Token in UChar: %S\n", utf8Token);
        while (token != NULL) {
            printf("Hello.\n");
            fwprintf(wofileString, L"%ls and length: %d\n", token, wcslen(token));
            fwprintf(wofileString, L"UTF8 rep:%s and length: %d\n", utf8Token, u_strlen(utf8Token));
            int32_t counter = 0;
            for (counter = 0; counter < u_strlen(utf8Token);) {
                UChar32 ch;
                U8_NEXT(utf8Token, counter, u_strlen(utf8Token), ch);
                fwprintf(wofileString, L"Token[%d] = ", counter);
                if (ch < 127) {
                    printf("Less than 127.\n");
                    if (ch > 1) {
                        printf("Printing%d.\n", ch);
                        u_fprintf((UFILE *)wofileString, "%c\n", (UChar)ch);
                    }
                } else if (ch == CharacterIterator::DONE) {
                    printf("Done.\n");
                    u_fprintf((UFILE *)wofileString, "[CharacterIterator::DONE]\n");
                } else {
                    printf("More than 127.\n");
                    u_fprintf((UFILE *)wofileString, "[%X]\n", ch);
                }
            }
            token = wcstok_s(NULL, L" ", &nextToken);
            utf8Token = (UChar *)token;
            counter = 0;
        }
        fputws(L"Complete String: ", wofileString);
        fputws(readString, wofileString);
        fputws(L"\n", wofileString);
    }

進入打印字符的部分時,該程序始終停止工作。

我的問題:
1.如何打印輸入的UTF8字符串中的所有“字符”?
2.是轉換: UChar *utf8Token = (UChar *) token; 甚至正確嗎? 鑒於token的內部表示是UTF16還是UTF32
3.我哪里出問題了?
4.如何獲得字符串的子字符串?

fwprintf(wofileString,… u_fprintf((UFILE *)wofileString,…

這兩行之一是錯誤的,具體取決於wofileString實際上是什么。

我建議只使用u_…函數。

實際上,我只使用u_printf("string", …)u_printf_u(L"String", …)而不是fwprintffputws

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM