Jak napisać farsi postaci Unicode w C++ w ms-dos?Jak napisać farsi postaci Unicode w C++ w konsoli ms-dos?
cout < < "Świat Helo" < < "سلام جهان";
Jak napisać farsi postaci Unicode w C++ w ms-dos?Jak napisać farsi postaci Unicode w C++ w konsoli ms-dos?
cout < < "Świat Helo" < < "سلام جهان";
#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
}
Nie odpowiada na pytanie: to pisze zupełnie inne postacie: P – Thomas
@Thomas: Ale jeśli nie jesteś całkowicie martwy mózg (co, mam nadzieję, nie jest prawdziwe dla wszystkich programistów). Możliwość zmiany powyższego programu w celu wydrukowania różnych znaków będzie (jak powinienem to powiedzieć) "Warkocz martwego cięcia i wklejania". Chodzi o to, aby ustawić poprawne lokalne (ponieważ domyślnie jest to ustawienie "C", które zwykle nie jest bardzo dobre w niczym innym niż angielskim). –
Nie zapomnij użyć czcionki zawierającej litery pożądanego języka. Również język farsi, taki jak arabski, to RTL, niektóre litery są połączone, inne nie są, a co nie. Powodzenia w "naprawianiu" głupiej wygrywającej konsoli, aby robić to, co chcesz;) – AraK
Konwertuj ciąg znaków na prawidłową stronę kodową. Strony kodowe MS-DOS są nazywane CP437, z CP i trzema cyframi. Zauważ, że zwykle może być wyświetlanych tylko mniej niż 256 różnych znaków, a zatem wiele znaków Unicode po prostu nie może być wyświetlanych w trybie tekstowym.
CP708 to arabska strona kodowa w MS-DOS. Zobacz http://msdn.microsoft.com/en-us/library/cc195051.aspx, aby uzyskać pełną listę od Microsoft. – David
Możesz użyć wchar_t zamiast char.
i powinieneś używać także wcout zamiast cout.
jeśli twoja konsola obsługuje Unicode, to zadziała. innym sposobem dla Irańczyków było oprogramowanie o nazwie "vegaf", ale było to wiele lat temu i zapomniałem o nim.
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();
Masz na myśli "jak" zamiast "kto"? –
Czy naprawdę myślisz w MS-Dos, czy masz na myśli wiersz polecenia w nowoczesnej wersji systemu Windows? –