-
Notifications
You must be signed in to change notification settings - Fork 72
Encoding support (zh)
haibo2.liu edited this page Sep 29, 2022
·
2 revisions
configor 支持 char
、wchar_t
等多种字符类型。
对于 wchar_t
类型,可使用下面的别名来使用宽字符版本:
json::value // char
wjson::value // wchar_t
宽字符版本用法和窄字符相同:
wjson j = wjson::parse(L"{ \"name\": \"中文测试\" }");
std::wstring str = j[L"name"].get<std::wstring>();
不同的字符类型可以相互转换:
json::value j; // 窄字符版本 json value
// char-value --> wchar_t-string
std::wstring str = json::dump<wchar_t>(j);
// wchar_t-string --> char-value
j = json::parse<wchar_t>(str);
对 char16_t 和 char32_t 字符类型需要使用下面的别名
struct u16value_tpl_args : value_tplargs
{
using char_type = char16_t;
};
struct u32value_tpl_args : value_tplargs
{
using char_type = char32_t;
};
// char16_t
using u16json = configor::basic_json<u16value_tpl_args>;
// char32_t
using u32json = configor::basic_json<u32value_tpl_args>;
由于C++标准库并不支持 char16_t 和 char32_t 的IO流,在不同的平台和编译器上可能会有不同表现。
configor 具有完备的 unicode 支持,内建的 encoding 有以下几种:
编码 | 说明 |
---|---|
encoding::ignore | 不进行编解码 |
encoding::auto_utf | 根据 char_type 自动处理 Unicode(默认) |
encoding::utf8 | UTF-8 |
encoding::utf16 | UTF-16 |
encoding::utf32 | UTF-32 |
序列化和反序列化时可以设置编码
// 使用 utf8 编码
json::parse(str, { json::parser::with_encoding<encoding::utf8>() });
json::dump(j, { json::serializer::with_encoding<encoding::utf8>() });