c++ - 使用 wchar_t 更改字符类型不像 L
问题描述
在我的代码中,我尝试创建大量 4 个咬字符,其中每个字符都包含一个西里尔字母。
wchar_t OUT_STRING[4] = { L'т',L'л',L'о',L'р' };
一切正常,我有预期的输出。这只是测试,实际上我需要将元素从字符串转换为与 OUT_STRING 中相同的类型;我试图使用这样的东西:
wchar_t OUT_STRING[4] = { (wchar_t)'т',L'л',L'о',L'р' };
但它没有用,在输出中我有一个矩形。
解决方案
我认为您想使用 UTF-8 编码中的 std::string 传入一个字符串并一次处理一个字符,每次将单个字符转换为长度为 1 的宽字符串,以便您可以将其传递给TTF_SizeUNICODE
,和TTF_RenderUNICODE_Blended
。
我将演示相关的字符串转换代码。
这是一个test
函数,它需要一个以空字符结尾的宽字符串,其中只有一个字符。正文main
显示了如何将 UTF-8 字符串转换为 UTF-16(使用codecvt_utf8_utf16
)以及如何将单个字符转换为字符串(使用std::wstring(1, ch)
)
#include <string>
#include <codecvt>
#include <iostream>
void test(const wchar_t* str) {
std::cout << "Number of characters in string: " << wcslen(str) << std::endl;
for (const wchar_t* ch = str; *ch; ++ch) {
std::cout << ((int)*ch) << std::endl;
}
}
int main() {
std::string input = u8"тлор";
for (wchar_t ch : std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t>().from_bytes(input)) {
std::wstring string_with_just_one_character(1, ch);
test(string_with_just_one_character.c_str());
}
return 0;
}
推荐阅读
- vba - 访问 - VBA 无效使用 null
- ios - 无法取消选择 collectionView 中的项目
- gforth - 如何在 Forth 中构建素数生成器?
- symfony - 如何手动将错误添加到 Symfony 中的表单组件?
- elasticsearch - 更改弹性搜索中的评分算法
- glsl - 如何在我的着色器中修复无法识别的 OpenGL 版本?
- android - 在关闭的应用程序中收到通知时转到特定活动?
- angular - Angular 6 使用哪个 Http 模块
- css - 与 Radium 和 Material-UI 一起使用时,React 悬停样式不起作用
- json - 如何从scala中的foreach读取地图值