[英]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並相應地更新編譯參數,從而定義MBCS
或UNICODE
。
如果使用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.