ifstream是否支持UTF8?

时间:2014-08-18 23:54:40

标签: c++ c++11

我想知道在c ++中,我们如何支持UTF8编码?我认为c ++只支持char和w_char,但我想知道如何支持UTF-8?

1 个答案:

答案 0 :(得分:5)

支持UTF-8就好了; UTF-8使用八位符号来表示字符,每个字符具有一个或多个符号。该标准保证char至少为8位,因此每个符合C ++的实现都可以读取,写入和处理UTF-8字符。由于7位ASCII是UTF-8的严格子集,因此char字符串和UTF-8之间的转换也不是问题。

的问题是在其他编码之间进行转换(代码页如Latin-1或其他Unicode编码,如UTF-16,UCS-2,UTF-32和UCS-4)和UTF-8。以下是对情况的概述:

  • C ++ 98提供wchar_t类型并允许L"XXX"形式的宽字符串文字,但保留了实现定义的大部分细节。因此VC ++将wchar_t视为16位,并将宽字符串文字编码为UTF-16; GCC将wchar_t视为32位,并将宽字符串文字编码为UTF-32。
  • C ++ 11提供了一些额外的类型char16_tchar32_t,以及u"XXX"U"XXX"的16位和32位文字。但是,VC ++尚不支持这些(GCC有它们)。
  • codecvt模板支持编码之间的转换。这是在C ++ 98中添加的,但至少可以说支持是不稳定的。今天,VC ++似乎有合理的支持,但缺乏GCC的支持。