簡體   English   中英

如何讀取c ++中未包含在ascii中的字符?

[英]How to read a character not included in ascii in c++?

我正在瀏覽一個編輯標題的文件夾。 我試圖刪除標題的某一部分,但標題中用於分隔的括號不是標准的ascii,所以我無法找到一種方法來刪除它。 這是標題的樣本:【刪除此部分】保留此部分。 我已經包含了我正在使用的編碼。 我正在使用cstring來存儲標題,然后使用cstring :: find()來定位該部分,但它無法找到該類型的括號。

    //sets definition
    HANDLE hfind;
    WIN32_FIND_DATA data;

    //creates string for to search for a specific file
    CString FileFormat = FolderPath + Format;
    CString NewTitle, PulledFile;

    //sets definition for retrieving first file
    hfind = FindFirstFile(FileFormat, &data);

    //runs loop if handle is good
    if (hfind != INVALID_HANDLE_VALUE)
    {
    //loops until it hits the end of the folder
    do {
        //adds filename to vector
        PulledFile = data.cFileName;
        if(PulledFile.Find(L'【') != -1)
        {
            while (PulledFile.Find(L'】') != -1)
            {
                PulledFile = PulledFile.Right(PulledFile.GetLength() - 1);
            }
        }
        NewTitle = PulledFile.Left(PulledFile.GetLength()-(Format.GetLength() + 9));
        if (sizeof(NewTitle) != NULL)
        {
            v.push_back(NewTitle);
        }
    } while (FindNextFile(hfind, &data));
    }

您面臨的最可能的問題是您沒有正確編譯。 根據CString文檔

CStringW對象包含wchar_t類型並支持Unicode字符串。 CStringA對象包含char類型,並支持單字節和多字節( MBCS )字符串。 CString對象支持char類型或wchar_t類型,具體取決於在編譯時是否定義了MBCS符號或UNICODE符號。

實際的底層類型取決於您的編譯參數。 最有可能的是它正在嘗試將Unicode字符串與MBCS字符串文字值進行比較,並且不返回任何內容。

如果要解決此問題,則應確定是否要使用Unicode或MBCS並相應地更新編譯參數,從而定義MBCSUNICODE

如果使用Unicode,則必須更改字符串文字,因為它目前適用於MBCS。 您可以使用代碼點L'\【'來返回正確的字符,或者確保您的文件使用Unicode編碼並使用u'【'

很可能你的編輯器沒有正確編碼硬編碼的【和】作為你尋求的unicode字符。 Visual Studio有時會將源文件自動編碼為UTF8,但這並不總是可靠的,並且可能無法在需要ascii的源控制系統中生存。

最簡單的方法是使用\\ uNNNN語法來匹配字符。

    if(PulledFile.Find(L'\u3010') != -1)
    {
        while (PulledFile.Find(L'\u3011') != -1)
        {
            PulledFile = PulledFile.Right(PulledFile.GetLength() - 1);
        }
    }

其中\【\】分別是【和】的unicode值的十六進制轉義序列。

暫無
暫無

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

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