نمایش char16_t در خط فرمان لینوکس ( یا ویندوز ) - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

نمایش char16_t در خط فرمان لینوکس ( یا ویندوز )

0 امتیاز

سلام

آیا میشه که بجای چاپ مقدار char16_t خود حرف char16_t چاپ بشه؟

مثلاً بجای اینکه cout مقدار دهدهی 65 رو چاپ کنه، خود حرف A رو چاب کنه. ( البته با اینکدینگ utf-16 )

#include <iostream>
using namespace std;

int main()
{
   char16_t ch = u'A';
   cout << ch << endl;
}
سوال شده خرداد 30, 1395  بوسیله ی علی۵۰۰ (امتیاز 13)   1 3
ویرایش شده خرداد 30, 1395 بوسیله ی علی۵۰۰

2 پاسخ

0 امتیاز

مشکل این هست که cout کاراکتر رو به شکل یک عدد 16 بیتی میبینه و اون رو چاپ میکنه . 

برای نشان دادن درست باید تبدیلش کنین به رشته از کاراکتر با استفاده از wstring_convert


#include <iostream>
#include<codecvt>
using namespace std;

int main()
{
    char16_t ch = u'A';
    std::wstring_convert<std::codecvt_utf16<char16_t>, char16_t> converter;
    std::cout << converter.to_bytes(ch) << '\n';
}

 

پاسخ داده شده تیر 5, 1395 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
0 امتیاز

من توانستم به صورت زیر، در خط فرمان mlterm لینوکس، این نویسه و رشته‌ها را چاپ کنم.

#include <iostream>
#include <codecvt>
#include <locale>
#include <string>
using namespace std;

int main()
{
    char16_t ch16 = u'ی';

    wstring_convert< codecvt_utf8_utf16< char16_t >, char16_t > convert;
    string a = convert.to_bytes( u"This string has UTF-16 content" );
    u16string b = convert.from_bytes( u8"امتحان" );
    u16string c = u"UTF-16";

    cout << a << endl;
    cout << b.size() << endl;
    cout << convert.to_bytes( b ) << endl << convert.to_bytes( c ) << endl
         << convert.to_bytes( ch16 ) << endl;
}

برای چاپ این نویسه‌ها(کاراکترها) و رشته‌ها، هم از پاسخ قبلی و هم از لینک زیر کمک گرفتم.

http://stackoverflow.com/questions/7232710/convert-between-string-u16string-u32string

پاسخ داده شده شهریور 7, 1395 بوسیله ی علی۵۰۰ (امتیاز 13)   1 3
ویرایش شده شهریور 30, 1395 بوسیله ی علی۵۰۰
...