在C ++中将分数(1 / 8,3 / 8,5 / 8,7 / 8)转换为UTF-8

问题描述 投票:0回答:2

我必须使用符号显示分数,我似乎无法显示这些4.使用

char UCP_VULGAR_FRACTION_ONE_HALF_UTF8 = L'\u00BD';
char UCP_VULGAR_FRACTION_ONE_QUARTER_UTF8 = L'\u00BC';
char UCP_VULGAR_FRACTION_THREE_QUARTERS_UTF8 = L'\u00BE';

我可以得到1/2,1/4和3/4以显示正常(cout<< (char)UCP_VULGAR_FRACTION_ONE_HALF_UTF8),但对这些分数做同样的事情:

char UCP_VULGAR_FRACTION_ONE_EIGHTH_UTF8 = L'\u215B';
char UCP_VULGAR_FRACTION_THREE_EIGHTHS_UTF8 = L'\u215C';
char UCP_VULGAR_FRACTION_FIVE_EIGHTHS_UTF8 = L'\u215D';
char UCP_VULGAR_FRACTION_SEVEN_EIGHTHS_UTF8 = L'\u215E';

给我[\]^。我究竟做错了什么?我试过g_unichar_to_utf8没有成功......

c++ utf-8
2个回答
2
投票

对于UTF-8,您需要存储多字节字符 - 包含在一个或多个字节中的字符。通常这些存储在std::string中:

std::string const UCP_VULGAR_FRACTION_ONE_EIGHTH_UTF8 = u8"\u215B";
std::string const UCP_VULGAR_FRACTION_THREE_EIGHTHS_UTF8 = u8"\u215C";
std::string const UCP_VULGAR_FRACTION_FIVE_EIGHTHS_UTF8 = u8"\u215D";
std::string const UCP_VULGAR_FRACTION_SEVEN_EIGHTHS_UTF8 = u8"\u215E";

或者可能是一个空终止的char数组:

char const* UCP_VULGAR_FRACTION_ONE_EIGHTH_UTF8 = "\u215B";
char const* UCP_VULGAR_FRACTION_THREE_EIGHTHS_UTF8 = "\u215C";
char const* UCP_VULGAR_FRACTION_FIVE_EIGHTHS_UTF8 = "\u215D";
char const* UCP_VULGAR_FRACTION_SEVEN_EIGHTHS_UTF8 = "\u215E";

1
投票

使用wchar_t而不是char。另外请注意,你不能使用wchar_t打印std::cout,你需要使用std::cout的宽版std::wcout。顺便说一句,如果你将wcoutcout一起使用,该程序最有可能崩溃。所以你可能想要将这些unicode字符存储在普通的UTF-8 std::string而不是wchar_t中,并使用std::cout打印它们

© www.soinside.com 2019 - 2024. All rights reserved.