string - 有什么简单的方法可以用 CString 中的空格替换 %20 吗?
问题描述
我需要用空格替换一些 %20 并得到我不明白的编译错误:
CString str = _T("foo%20bar");
str.Replace('%20',' '); // C4305 argument: truncation from 'int' to 'wchar_t'
str.Replace(_T('%20'),_T(' ')); // C4305 argument: truncation from 'int' to 'wchar_t'
str.Replace(_T("%20"),_T(" ")); // C2664 'int ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>::Replace(const wchar_t *,const wchar_t *)': cannot convert argument 1 from 'const char [4]' to 'wchar_t'
怎么了?
解决方案
该CString::Replace()
方法将空终止的字符串指针作为输入,而不是单个字符。您的字符串文字需要使用,"
而不是'
,例如:
CString str = _T("foo%20bar");
str.Replace(_T("%20"), _T(" "));
请注意,这与您的最后一个示例相匹配,您说这也是错误的。唯一可能因您显示的错误消息而失败的方法是,如果您的项目中有错误配置,其中UNICODE
定义了1但_UNICODE
未定义2。
1:通过CString
映射到CStringT<wchar_t>
.
2:正如编译器所说的那样明显_T("%20")
是 aconst char[]
而不是 a const wchar_t[]
。
CString
使用TCHAR
来自 Win32 API,而不是_TCHAR
来自 C 运行时库。 通常它们是可以互换的,但在您的情况下并非如此。因此,您需要修复项目的配置,以便_UNICODE
也定义它,或者使用 Win32TEXT()
宏来匹配CString
的使用TCHAR
:
CString str = TEXT("foo%20bar");
str.Replace(TEXT("%20"), TEXT(" "));
或者,干脆完全停止使用TCHAR
基于 -based 的 API(TCHAR
可以追溯到 Win9x/ME 时代,当时微软正在推动每个人开始将他们的代码迁移到 Unicode),如果可以避免的话,真的不应该在现代编码中使用它。只需wchar_t
直接使用字符串,例如:
CStringW str = L"foo%20bar";
str.Replace(L"%20", L" ");
推荐阅读
- java - TotalElements 为数据表总行返回不正确的值
- java - 是否可以在 OkHttp 中的查询参数后添加路径段?
- python - “OSError:[Errno 127] 密钥已过期” - Pandas df.to_csv 方法
- sql - 在 Bigquery SQL 中:如何获取前一周、指定周和下周的数据?
- r - 超过指定值时如何对列执行百分比增加
- python - 如何将带有字符串和 DataFrame 的列表写入 .txt 文件
- paypal - Paypal - CHECKOUT.ORDER.APPROVED 但没有 PAYMENT.CAPTURE.COMPLETED
- android - 使用 Intent 中的值在 ListView 中选择项目
- python - pdf文件中的换行符写入python中的下一行
- git - 从 BitBucket 在 Confluence 中显示 PlantUML