有时开发人员希望将某些文本从多字节编码转换为 Unicode 或 UTF,然后再转换回来。为此,可以使用 OdString 和 OdAnsiString 类。从 Teigha 4.3.0 版本开始,CP_UTF_8 编码已包含在支持的编码列表中。
例如,以下 UTF-8 编码的字符数组在俄语中是“Test string”:
char testStr[] = { '\xD0', '\xA2', '\xD0', '\xB5', '\x63', '\xD1', '\x82', '\xD0', '\xBE', '\xD0', '\xB2', '\xD0', '\xB0', '\xD1', '\x8F', '\x20', '\xD0', '\xA1', '\xD1', '\x82', '\xD1', '\x80', '\xD0', '\xBE', '\xD0', '\xBA', '\xD0', '\xB0', 0 };
这是已初始化的 UTF-8 ANSI 字符串:
OdAnsiString ansiStr(testStr, CP_UTF_8);
这是仅包含 ASCII 缓冲区的 OdString:
OdString unicodeStr(ansiStr);
这里我们得到 pStr 作为指向 Unicode 缓冲区的指针,作为转换结果:
const OdChar *pStr = unicodeStr.c_str();
unicodeStr 的两个缓冲区(ASCII 和 Unicode)是同步的。要从 unicodeStr 获取 OdAnsiString,ASCII 缓冲区在内容保持不变之前不进行任何转换。
现在我们有了已初始化的 Unicode 字符串:
OdString unicodeStr1(pStr);
unicodeStr1 仅包含已初始化的 Unicode 缓冲区。
这里我们在 sAnsiUtf8 中获取 UTF-8 文本:
OdAnsiString sAnsiUtf8(nStr, CP_UTF_8);
这里我们在 sAnsi1251 中获取 ANSI_1251 文本:
OdAnsiString sAnsi1251(sStr, CP_ANSI_1251);
这里我们使用带有代码页 ANSI_1251 的 ASCII 文本来初始化 OdString:
OdString sStr1251(sAnsi1251);
这里我们得到 Unicode 字符串,作为缓冲区同步期间转换的结果:
const OdChar *pStr = nStr1251.c_str();