Question

Comment écrire le caractère unicode farsi en c ++ en ms-dos?

Cout << "Helo world" << "سلام جهان";

Était-ce utile?

La solution

#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
}

Autres conseils

Vous devez convertir la chaîne en codepage. codepages MS-DOS sont nommés comme CP437, avec CP suivi de trois chiffres. Notez que normalement moins de 256 caractères différents peuvent être affichés et donc beaucoup de caractères Unicode simplement ne peuvent pas être affichés en mode texte.

vous pouvez utiliser wchar_t au lieu de char.

et vous devez utiliser wcout au lieu de Cout aussi.

si cela va fonctionner votre support de la console unicode. une autre façon pour les Iraniens est un logiciel appelé « vegaf », mais il y a beaucoup pour son année et je l'oublie.

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top