【发布时间】:2020-10-23 04:52:22
【问题描述】:
假设我有一个类似的功能
template<typename charT>
void fun(std::basic_ostream<charT>& out, std::basic_fstream<charT>& file)
{
std::basic_string<charT> str;
file>>str;
out<<str;
}
注意:文件编码为 utf-8
我不了解 Unicode。我可以将此函数用于 ASCII 和 Unicode,或者使用 basic_type 构建一个类,以便类类可以用于 Unicode 和 ASCII。
我的问题是 ASCII 和 Unicode 在处理级别上有什么区别吗?
编辑:
处理级别意味着对该字符串进行操作,例如追加、打印和从文件中获取字符串。
为什么我问这个问题是 std::string 和 std::wstring 是具有 char 和 wchar_t 的 basic_string 的 typedef ed 版本
并且 std::cout 和 std::wcout 是 std::basic_ostream 的 typedef ed 版本,具有 char 和 wchar_t 但两个代码相同。
在这两种情况下,区别只是记忆。
所以我使用 basic_type 构建了一个类,以便该类可用于 ASCII 和 Unicode。
【问题讨论】:
-
是的。 ASCII 和 unicode 编码是不同的。我不知道您所说的“处理级别”是什么意思。
-
有数以万计的 Unicode 字符可以编码为 UTF-8 但不能编码为 ASCII。如果您的文件包含其中之一,您究竟希望发生什么?
-
@eerorika 我的意思是对该字符串的处理(如追加)或打印它或从文件中获取一个字符串
-
这里的问题不是对空白字符的解释吗? operator>> 取决于知道什么是空白字符,并且一些 unicode 空白字符具有多字节 UTF-8 编码。
-
C++ 并不真正支持 unicode。如果您想使用 unicode,我建议您使用类似 ICU 的库