Wie Unicode-Zeichen farsi in C ++ in MS-DOS-Konsole zu schreiben?
Frage
Wie Unicode-Zeichen farsi in C ++ in MS-DOS schreiben?
cout << "Helo Welt" << "سلام جهان";
Lösung
#include <iostream>
#include <locale>
#include <string>
int main()
{
using namespace std;
wstring wcs = L"中文";
locale old = wcout.imbue(locale("") ); // "" is environment's default locale
wcout<<wcs<<endl;
wcout.imbue(old ); // restore old locale
}
Andere Tipps
Sie müssen die Zeichenfolge in der richtigen Codepage konvertieren. MS-DOS-Codepages ist wie CP437 genannt, mit CP gefolgt von drei Ziffern. Beachten Sie, dass normalerweise nur weniger als 256 verschiedene Zeichen angezeigt werden können und somit viele Unicode-Zeichen können nicht nur im Textmodus angezeigt werden.
Sie können Wchar_t statt char verwenden.
und Sie sollten auch statt cout verwenden wcout.
Wenn Sie Ihre Konsole Unterstützung Unicode dies funktionieren wird. ein andere Art und Weise für Iraner war eine Software „vegaf“ genannt, aber sein viele Jahre und ich vergesse es.
using namespace std;
setlocale(LC_ALL, "fa-IR");
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
struct lconv * lc;
lc = localeconv();
LOGFONT * tFont;
tFont = GetFont();
CFont font;
VERIFY(font.CreateFont(
tFont->lfHeight, // nHeight
tFont->lfWidth, // nWidth
0, // nEscapement
0, // nOrientation
tFont->lfWeight, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ARABIC_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
ANTIALIASED_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
tFont->lfFaceName)); // lpszFacename
const wchar_t yek = L'\u06F1';
const wchar_t dow = L'\u06F2';
const wchar_t seh = L'\u06F3';
const wchar_t chahar = L'\u06F4';
const wchar_t panj = L'\u06F5';
const wchar_t shish = L'\u06F6';
const wchar_t haft = L'\u06F7';
const wchar_t hasht = L'\u06F8';
const wchar_t noh = L'\u06F9';
const wchar_t sefr = L'\u06F0';
wchar_t wFATime[20];
wcscpy(wFATime, L"");
BOOL dayoftheweek = FALSE;
for (unsigned int i = 0; i<m_strText.GetLength(); i++)
{
char c = m_strText[i]; //this is your character
switch (c)
{
case '1':
wcsncat(wFATime, &yek, 1);
break;
case '2':
wcsncat(wFATime, &dow, 1);
break;
case '3':
wcsncat(wFATime, &seh, 1);
break;
case '4':
wcsncat(wFATime, &chahar, 1);
break;
case '5':
wcsncat(wFATime, &panj, 1);
break;
case '6':
wcsncat(wFATime, &shish, 1);
break;
case '7':
wcsncat(wFATime, &haft, 1);
break;
case '8':
wcsncat(wFATime, &hasht, 1);
break;
case '9':
wcsncat(wFATime, &noh, 1);
break;
case '0':
wcsncat(wFATime, &sefr, 1);
break;
case ':':
wcsncat(wFATime, L":", 1);
break;
case '.':
wcsncat(wFATime, L".", 1);
break;
case '/':
wcsncat(wFATime, L"/", 1);
break;
default:
dayoftheweek = TRUE;
}
}
CFont* def_font = pdc->SelectObject(&font);
HDC hdc = pdc->GetSafeHdc();
int old = pdc->SetBkMode(TRANSPARENT);
if (dayoftheweek)
{
CStringW strw(m_strText);
::TextOutW(hdc, m_poOffset.x, m_poOffset.y, strw, strw.GetLength());
}
else
{
::TextOutW(hdc, m_poOffset.x, m_poOffset.y, wFATime, wcslen(wFATime));
}
pdc->SelectObject(def_font);
pdc->SetBkMode(old);
// Done with the font. Delete the font object.
font.DeleteObject();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow