2017-12-21 8 views
0

심볼을 사용하여 분수를 표시해야하는데이 4 개를 표시 할 수없는 것 같습니다. 그 분수에 대해 동일한을C++에서 분수 (1/8, 3/8, 5/8, 7/8)를 UTF-8로 변환

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을 시도했습니다 ...

+0

합니다. – Ron

+2

utf8은 기호의 유형이 byte (char)임을 의미하지 않습니다. –

+5

'L '...''은'wchar_t' 문자 리터럴을 정의합니다. 'wchar_t' 값을'char' 변수에 할당 할 수 없습니다. 대신'wchar_t' 변수를 사용하십시오. 실제 UTF-8 리터럴을 원하면'u8 "..."대신에'const char *'또는'std :: string'에 할당하십시오. –

답변

2

를 사용하여 인쇄 할 수 있습니다 - 하나 이상의 바이트에 포함 된 문자를.

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"; 

또는 아마도 는 null 문자 배열 종료 : 일반적으로 이러한는 std::string에 저장되어 내가 대신 넓은 문자를 사용한다고 생각

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"; 
+0

불행히도 저는 C++ 11 코드에서 작업하지 않으므로 u8을 사용할 수 없습니다 .. – adinutzyc21

+0

@ adinutzyc21 그러면 빠져 나가십시오. '\ uNNNN'을 사용하면 문자열에 올바른 코드를 넣어야합니다. 그렇지 않으면 실제 문자를 복사하여 문자열로 지나치십시오. – Galik

+0

'std :: string'으로 저장할 이유가 없습니다. (상수이고, 확장 할 필요가 없습니다. 포함 된 NUL의 가능성은 없습니다.) 단지'const char *'를 사용하십시오. –

1

char 대신 wchar_t을 사용하십시오. 또한 wchar_tstd::cout을 사용하여 인쇄 할 수 없다는 것을 알고 있어야하며 std::cout의 넓은 버전 (std::wcout)을 사용해야합니다. 당신이 cout 함께 wcout 함께 사용하는 경우 BTW, 프로그램이 대부분 충돌합니다. 그래서 당신은 정상 UTF-8 대신 wchar_tstd::string 이러한 유니 코드 문자를 저장하려면, 당신은 멀티 바이트 문자를 저장할 필요가 UTF-8를 들어 std::cout