2010-01-30 8 views
7

एमएस-डॉस में सी ++ में यूनिकोड चरित्र फारसी कैसे लिखें?एमएस-डॉस कंसोल में सी ++ में यूनिकोड चरित्र फारसी कैसे लिखें?

cout < < "हेलो वर्ल्ड" < < "سلام جهان";

+0

क्या आपका मतलब है 'कौन' के बजाय 'कैसे'? –

+3

क्या आप वास्तव में एमएस-डॉस में हैं, या क्या आप विंडोज के आधुनिक संस्करण में कमांड प्रॉम्प्ट का मतलब है? –

उत्तर

3
#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 
} 
+0

प्रश्न का उत्तर नहीं देता है: यह पूरी तरह से अलग-अलग वर्ण लिखता है: पी – Thomas

+1

@ थॉमस: लेकिन जब तक कि आप पूरी तरह मस्तिष्क नहीं मर जाते (जो मुझे उम्मीद है कि सभी प्रोग्रामर के लिए सच नहीं है)। विभिन्न पात्रों को मुद्रित करने के लिए उपर्युक्त प्रोग्राम को बदलने की क्षमता (मुझे इसे कैसे रखा जाना चाहिए) "एक ब्रेड मृत कट और पेस्ट"। संपूर्ण बिंदु सही स्थानीय सेट करना है (डिफ़ॉल्ट रूप से "सी" लोकेल है जो सामान्य रूप से अंग्रेजी पर कुछ भी अच्छा नहीं है)। –

+1

वांछित लैंगेज के अक्षरों वाले फ़ॉन्ट का उपयोग करना न भूलें। इसके अलावा, अरबी की तरह फारसी आरटीएल है, कुछ पत्र जुड़े हुए हैं और नहीं हैं। शुभकामनाएं जो आप चाहते हैं उसे करने के लिए बेवकूफ जीत कंसोल को "ठीक करने" की कोशिश कर रहे हैं;) – AraK

3

आपको स्ट्रिंग को उचित कोडपृष्ठ में बदलने की आवश्यकता है। एमएस-डॉस कोडपेजों को सीपी 437 जैसे नामित किया गया है, सीपी के बाद तीन अंक हैं। ध्यान दें कि आम तौर पर केवल 256 से कम वर्णों को प्रदर्शित किया जा सकता है और इस प्रकार कई यूनिकोड वर्णों को टेक्स्ट मोड में नहीं दिखाया जा सकता है।

+0

सीपी 708 एमएस-डॉस में अरबी कोड पृष्ठ है। माइक्रोसॉफ्ट से पूरी सूची के लिए http://msdn.microsoft.com/en-us/library/cc195051.aspx देखें। – David

0

आप चार के बजाय wchar_t का उपयोग कर सकते हैं।

और आपको भी कोउट के बजाय wcout का उपयोग करना चाहिए।

यदि आपका कंसोल यूनिकोड का समर्थन करता है तो यह काम करेगा। ईरानियों के लिए एक और तरीका "वेगाफ" नामक एक सॉफ्टवेयर था, लेकिन यह बहुत सालों पहले था और मैं इसे भूल गया।

0
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(); 
संबंधित मुद्दे