यह पर्ल में एक बग प्रतीत होता है। मैंने सोचा था कि यह विंडोज कोड पेज 65001 में वास्तव में कंसोल के लिए समर्थित नहीं है, लेकिन अंत में मैंने सी और पर्ल में परीक्षण कार्यक्रम किए हैं और समस्या सी संस्करण में नहीं होती है। यह कोई फर्क नहीं पड़ता कि यूनिकोड चरित्र रेखा में कहां होता है लेकिन जिस लाइन को आप प्रिंट कर रहे हैं वह कंसोल समर्थन से व्यापक होना चाहिए। यहाँ
#include "stdafx.h"
#include "Windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
BOOL b = SetConsoleOutputCP(65001);
printf("set console output codepage returned %d\n", b);
printf("cαfe\n");
printf("1234567890 café\n");
printf("1234567890 1234567890 cαfe\n");
printf("1234567890 1234567890 1234567890 café\n");
printf("1234567890 1234567890 1234567890 1234567890 cαfe\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 café\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 café\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 café\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 café\n");
printf("1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n");
return 0;
}
और मेरे पर्ल कार्यक्रम है:
यहाँ मेरी सी कार्यक्रम है
#
use utf8;
binmode STDOUT, ':utf8';
printf STDOUT "cαfe\n";
printf STDOUT "1234567890 café\n";
printf STDOUT "1234567890 1234567890 cαfe\n";
printf STDOUT "1234567890 1234567890 1234567890 café\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 cαfe\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 café\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 café\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 café\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 café\n";
printf STDOUT "1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 cαfe\n";
अद्यतन
नहीं मैं गलत था, में से कुछ की मदद से irc.perl.org पर #perl पर लोग माइक्रोसॉफ्ट एपीआई में एक बग बन जाते हैं। WriteFile
को बाइट्स की संख्या वापस करने के लिए दस्तावेज किया गया है, लेकिन वर्ण लिखा गया है, जो कोडपृष्ठ पर निर्भर करता है। A bug was filed in March 2010।
और चर्चा in the MSDN forums है।
अद्यतन 2
मैं माइकल कापलान के ब्लॉग, "Sorting it all out" पोस्ट, इस समस्या के बारे और वह लेख "Hidden in plain site: a purloined letter kind of a bug report" हकदार साथ जवाब दिया। वह एक माइक्रोसॉफ्ट अंतर्राष्ट्रीयकरण विशेषज्ञ है, इसलिए आपको निश्चित रूप से कुछ अंतर्दृष्टि मिल जाएगी ...
कोई विचार नहीं; मेरे लिए नहीं हो रहा है। क्या आप हमें पर्यावरण के बारे में कुछ बता सकते हैं जहां आप इसे चला रहे हैं? – ysth