[英]How to convert extended ascii characters from char to wstring in c++
我使用 ifstream 的读取方法将文件读取到 char* memory 块中。 我对 memory 块中的每个字符调用我的 GetChar 方法以写入 wstring。 我正在尝试将 unicode 个字符写入屏幕(至少我认为它们是 unicode,如果我错了请纠正我 - 哦不,看起来我错了它的扩展 ascii)。 不幸的是,我让它工作的唯一方法是在 switch 语句中对 unicode 字符进行硬编码,但我宁愿它适用于任何字符,而不仅仅是我遇到并通过硬编码添加的字符。
这是我目前正在使用的:
std::wstring GetChar(char o)
{
switch (o)
{
case 0x0D:
return L"♪";
case 0x0A:
return L"◙";
case -38:
return L"┌";
case -60:
return L"─";
case -77:
return L"│";
case -65:
return L"┐";
case -61:
return L"├";
case -76:
return L"┤";
case -2:
return L"■";
}
std::wstring tmp_string(1, o);
return tmp_string;
}
知道如何以通用方式将 -38 转换为 L"┌" 吗? [编辑]我发现我的映射实际上是扩展的ascii,,见网页https://www.sciencebuddies.org/science-fair-projects/references/ascii-table
我想我会尝试创建一个基于此网页的扩展 ascii 映射的 txt 文件: https://theasciicode.com.ar/是否有更简单的编程方式(例如使用 setlocale)?
您可以使用 std::map<char,wstring>。
wstring ConvertChar (const char target)
{
static const std::map<char, wstring> convert = {{38,L"┌"}, {76, L"┤"} ....
auto target = convert.find(target);
if (target != convert.end())
return *target;
return L" ";// NOT found
}
或者有一些函数可以在 char 和 wide 之间进行转换。 请参阅如何将 char* 转换为 wchar_t*?
我得到了一个令我满意的解决方案。 我写了一个包含字节 00 到 FF 的密钥文件,然后我用 eXtreme(不再存在)查看了该文件,它可以显示扩展的 ascii 值,然后我将其复制到 Notepad++ 中并保存为 unicode 值文件。 然后我将 0x00 到 0xFF 映射到它们漂亮的扩展 ascii 字符(保存为 unicode),所有这些都显示得很好,就像 wstrings(没有硬编码值)。 有一天我可能也想支持常规的 unicode 作为另一种模式,但扩展的 ascii 足以满足我当前正在使用的文件。 如果有人需要,这里是 eXtreme 的存档版本: http://members.i.net.net.au/~bertdb/ryan/eXtreme/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.