将 Unicode 转换为字符
convert unicode to char
如何在 embarcadero c++ 中将 Unicode 字符串转换为char*
或char* const
?
String text = "Hello world";
char *txt = AnsiString(text).c_str();
Older text.t_str() is now AnsiString(String).c_str()
"Unicode 字符串"确实不够具体,无法知道您的源数据是什么,但您可能是指"存储为数组wchar_t UTF-16 字符串",因为这是大多数不知道正确术语的人使用的。
"char*"也不足以知道你想要定位什么,尽管"embarcadero"可能有一些约定。我只是假设你想要 UTF-8 数据,除非你另有说明。
此外,我将我的示例限制在VS2010中的工作
// your "Unicode" string
wchar_t const * utf16_string = L"Hello, World!";
// #include <codecvt>
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t> convert;
std::string utf8_string = convert.to_bytes(utf16_string);
这假定wchar_t字符串是 UTF-16,就像在 Windows 上一样,但否则是可移植代码。
您可以合法地将任何数组重新解释为 char 指针数组。因此,如果您的 Unicode 数据采用 4 字节代码单元,例如
char32_t data[100];
然后你可以把它作为一个字符数组访问:
char const * p = reinterpret_cast<char const*>(data);
for (std::size_t i = 0; i != sizeof data; ++i)
{
std::printf("Byte %03zu is 0x%02X.n", i, p[i]);
}
这样,您可以逐个检查 Unicode 数据的各个字节。
(这当然与转换文本的编码无关。为此,请使用iconv
或 ICU 等库。
如果您使用 Windows:
//#include <windows.h>
u16string utext = u"объява";
char text[0x100];
WideCharToMultiByte(CP_UTF8,NULL,(const wchar_t*)(utext.c_str()),-1,text,-1,NULL,NULL);
cout << text;
我们不能使用 std::wstring_convert,因此在 MinGW 4.9.2 中不可用。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 字符转换功能 std::isupper() & std::islower() C++17
- 将字符 * 转换为字符串 *
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- 将单个字符转换为 std::string 前缀 \x01
- PPM 将字符转换为 int 授予负数
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 将常量字符* 转换为字符时出错