TA的每日心情 | 闭嘴 2024-4-8 11:56 |
---|
|
本帖最后由 bestkakkoii 于 2024-2-26 04:32 编辑
炫::文本编码器
此类旨在将ANSI文本与Unicode(utf16)轻松互转
公开函数:
- 炫::文本编码器* 炫::文本编码器::编码取文本编码器(无符号整数)
从ACP获取文本编码器的实例指针,可使用上方提供的中文或英文枚举值
透过该函数生成的指针不需要手动释放,由内部统一管理,在进程结束时自动释放,每一种ACP都具有唯一指针。
- 炫::文本编码器* 炫::文本编码器::编码名称取文本编码器(编码名称)
从编码名称取文本编码器的实例指针(大小写不限)请参阅下方对照表如 "Big5"
将指定ACP的文本转换为Unicode(utf16)
将指Unicode文本转换为指定ACP的文本
名称和ACP对照表:
//@别名 编码页
enum ActiveCodePage
{
US_ASCII = 20127, //@别名 美国标准代码
ISO_8859_1 = 28591, //@别名 西欧字符集
ISO_8859_2 = 28592, //@别名 中欧字符集
ISO_8859_3 = 28593, //@别名 南欧字符集
ISO_8859_4 = 28594, //@别名 北欧字符集
ISO_8859_5 = 28595, //@别名 拉丁_西里尔字符集
ISO_8859_6 = 28596, //@别名 拉丁_阿拉伯字符集
ISO_8859_7 = 28597, //@别名 拉丁_希腊字符集
ISO_8859_8 = 28598, //@别名 拉丁_希伯来字符集
ISO_8859_9 = 28599, //@别名 拉丁_土耳其字符集
ISO_8859_10 = 28600, //@别名 北欧字符集_2
SHIFT_JIS = 932, //@别名 日文假名字符集
EUC_JP = 20932, //@别名 日文扩展字符集
EUC_KR = 949, //@别名 韩文扩展字符集
ISO_2022_KR = 50225, //@别名 韩文邮件和新闻字符集
ISO_2022_JP = 50220, //@别名 日文邮件和新闻扩展字符集
ISO_2022_JP_2 = 50222, //@别名 日文邮件和新闻扩展字符集2
GB2312 = 936, //@别名 简体中文字符集
UTF_8 = 65001, //@别名 万国码
GBK = 936, //@别名 扩展国标
GB18030 = 54936, //@别名 中国国家标准
BIG5 = 950, //@别名 繁体中文字符集
CP851 = 851, //@别名 DOS西欧字符集
};
//@别名 编码地图标志
enum MapFlag
{
MapFlagByteRev = LCMAP_BYTEREV, //@别名 字节反转
MapFlagFullWidth = LCMAP_FULLWIDTH, //@别名 全角
MapFlagHalfWidth = LCMAP_HALFWIDTH, //@别名 半角
MapFlagHiragana = LCMAP_HIRAGANA, //@别名 平假名
MapFlagKatakana = LCMAP_KATAKANA, //@别名 片假名
MapFlagLinguisticCasing = LCMAP_LINGUISTIC_CASING, //@别名 语言大小写
MapFlagLowerCase = LCMAP_LOWERCASE, //@别名 小写
MapFlagHash = LCMAP_HASH, //@别名 哈希
MapFlagSimplifiedChinese = LCMAP_SIMPLIFIED_CHINESE, //@别名 简体中文
MapFlagSortHandle = LCMAP_SORTHANDLE, //@别名 排序句柄
MapFlagSortKey = LCMAP_SORTKEY, //@别名 排序键
MapFlagTitleCase = LCMAP_TITLECASE, //@别名 标题大小写
MapFlagTraditionalChinese = LCMAP_TRADITIONAL_CHINESE, //@别名 繁体中文
MapFlagUpperCase = LCMAP_UPPERCASE, //@别名 大写
};
//@隐藏{
CX_DECLARE_FLAGS(MapFlags, MapFlag);
//@隐藏{
static std::unordered_map<cxuint32, std::wstring> _PRIVATE_CODEPAGE_MAP = {
{US_ASCII, L"US-ASCII"},
{ISO_8859_1, L"ISO-8859-1"},
{ISO_8859_2, L"ISO-8859-2"},
{ISO_8859_3, L"ISO-8859-3"},
{ISO_8859_4, L"ISO-8859-4"},
{ISO_8859_5, L"ISO-8859-5"},
{ISO_8859_6, L"ISO-8859-6"},
{ISO_8859_7, L"ISO-8859-7"},
{ISO_8859_8, L"ISO-8859-8"},
{ISO_8859_9, L"ISO-8859-9"},
{ISO_8859_10, L"ISO-8859-10"},
{SHIFT_JIS, L"SHIFT-JIS"},
{EUC_JP, L"EUC-JP"},
{EUC_KR, L"EUC-KR"},
{ISO_2022_KR, L"ISO-2022-KR"},
{ISO_2022_JP, L"ISO-2022-JP"},
{ISO_2022_JP_2, L"ISO-2022-JP-2"},
{GB2312, L"GB2312"},
{UTF_8, L"UTF-8"},
{GBK, L"GBK"},
{GB18030, L"GB18030"},
{BIG5, L"BIG5"},
{CP851, L"CP851"},
};
//@隐藏}
|
使用方法:
[C++] 纯文本查看 复制代码 //正确使用方式实际上是 炫::文本编码器::编码取文本编码器(...) 但目前炫IDE还不支持这种写法
静态 炫::文本编码器 全局编码器;
炫::文本编码器 * 编码器指针 = 全局编码器.编码取文本编码器(炫::GB2312); //936为gb2312
文本型A ansi = A"哈哈哈";
文本型 unicode = 编码器指针->到十六位万国码(ansi); // 从ansi(gb2312)转unicode(utf16)
文本型A newANSI = 编码器指针->到指定编码(unicode); // 从unicode(utf16)转ansi(gb2312)
unicode = "龍123"
unicode = 编码器指针->映射字符串(炫::简体中文, unicode);
unicode = 编码器指针->映射字符串(炫::全角, unicode);
|
|