2011-02-17 10 views
5

मैंने वर्षों से कुछ अच्छी प्रोग्रामिंग भाषाओं का उपयोग किया है और मैं एक आर्मचेयर भाषाविद और विकिपीडिया में योगदानकर्ता हूं। मैं कमांडलाइन से विकिपीडिया को देखने के लिए अपने कुछ टूल बना रहा हूं लेकिन मैंने एक आश्चर्यजनक समस्या में भाग लिया है।क्या कोई भाषा यूनिकोड और क्रॉस-प्लेटफ़ॉर्म को ठीक से और पूरी तरह से करती है?

Neither Perl nor Python can output Unicode to the console natively under both *nix and Windows (हालांकि विभिन्न कामकाज हैं)। मुख्य कारण यह है कि * यूटीएफ -8 में उनके यूनिकोड की तरह निक्स ओएस और विंडोज़ यूटीएफ -16 में यूनिकोड पसंद करते हैं। लेकिन ऐसा लगता है कि Windows makes it very difficult to use wide characters with the console even though both the console and wprintf are wide character native

तो सवाल यह है कि, यदि मैं जावा, सी #, स्कैला इत्यादि में इन भाषाओं से परे दिखता हूं तो स्थिति बेहतर होती है या क्या ऐसी कोई स्क्रिप्टिंग भाषाएं हैं जो विंडोज़ पर शुरू हुईं और फिर * निक्स पर पोर्ट की गईं?

function main() 
{ 
    print(L"hello, 世界"); 
} 
+3

अंतिम उत्तर यह है कि किसी भी भाषा को आखिरकार 'लिखेंफाइल' के बजाय 'WriteConsoleW'' को कॉल करने की आवश्यकता होगी, एक अमूर्त बाधा तोड़ना ... इसलिए यह वास्तव में एक भाषा समस्या नहीं है, बल्कि लाइब्रेरी डिज़ाइन समस्या है। – Mehrdad

+0

मैं जावा की जांच करने के इच्छुक हो सकता हूं, क्योंकि इसका मूल रूप से मंच स्वतंत्रता पर लक्ष्य था और स्ट्रिंग हैंडलिंग यूनिकोड के आसपास बनाया गया था। स्रोत फाइलें यूनिकोड हैं, इसलिए आपका आदर्श psuedo कोड बस कुछ tweaking के साथ संकलित हो सकता है। – Jimmy

+0

@ मेहाड्राड: या माइक्रोसॉफ्ट संभवतः wprintf et al को ठीक कर सकता है ताकि आप बिना किसी रूपांतरण के विस्तृत वर्ण तारों को प्रिंट कर सकें, जब तक कि यह सी के wprintf या POSIX लोकेशंस या कुछ के विनिर्देशन में एक बग नहीं है? वैकल्पिक रूप से, प्रोग्रामिंग भाषाएं उनके प्रिंट फ़ंक्शन और WriteFile/WriteConsoleW या जो भी एपीआई पर भरोसा करती हैं, के बीच एक अमूर्त परत जोड़ सकती हैं। – hippietrail

उत्तर

0

AFAIK लगभग सभी पटकथा भाषाओं यूनिक्स दुनिया में शुरू कर दिया और फिर Windows पर वापस पोर्ट गया:

यहाँ कुछ आदर्श स्यूडोकोड है। मुझे विंडोज़ पर शुरू होने वाली एक (स्क्रिप्टिंग) भाषा का कोई उदाहरण नहीं पता है ... एक स्क्रिप्टिंग भाषा जो इन दिनों यूनिकोड के साथ बहुत अच्छी लगती है रूबी है।

+0

विंडोज़ पर शुरू होने वाली एकमात्र स्क्रिप्टिंग भाषा विंडोज पावरशेल है लेकिन पर्ल और पायथन के विपरीत यह प्रोग्रामों की तुलना में स्क्रिप्ट के लिए अधिक लक्षित है, और यह बहुत आर्केन है (-: – hippietrail

+1

ऐसा लगता है कि इसमें कुछ निफ्टी विशेषताएं हैं, हालांकि (वस्तुओं की पाइपिंग की तरह) ... लेकिन यह * केवल * विंडोज़ पर उपलब्ध है, इसलिए यह गिनती नहीं है :-) – DarkDust

+0

असल में * निक्स के लिए पावरशेल है, इसे पश कहा जाता है लेकिन पावरशेल लड़का नहीं है मैंने कोशिश नहीं की है यह: http://pash.sourceforge.net/ – hippietrail

-1

शायद यह समाधान आप की ओर संकेत किया में से एक है, लेकिन: आप कर सकते हैं chcp 65001 एक गैर रेखापुंज फ़ॉन्ट में कोई 'डॉस बॉक्स' में स्क्रिप्ट (या प्रोग्राम) से चुनकर उस दृश्य को UTF-8 उत्पादन जो यूनिक्स या विंडोज के तहत अपरिवर्तित है। भुगतान करने की कीमत यह है कि .bat/.cmd फ़ाइलें निष्पादित नहीं होंगी।

+2

"chcp 65001" यूटीएफ -8 में "एएनएसआई" एन्कोडिंग सेट करता है ताकि आप यूटीएफ -8 स्ट्रिंग के साथ WriteConsoleA का उपयोग कर सकें और साथ ही WriteConsoleW को UTF-16 स्ट्रिंग के साथ भी उपयोग कर सकें। प्रैक्टिस में यह खराब रूप से समर्थित लगता है। यह पाइथन को क्रैश करने के लिए और पर्ल को आउटपुट कलाकृतियों का कारण बनता है जो दिखते हैं कि वे वर्ण की लंबाई और यूटीएफ -8 तारों की बाइट लंबाई में अंतर से निकलते हैं। – hippietrail

+0

मैंने इसकी जांच की है और विंडोज़ के 'WriteFile()' एपीआई में एक बग है जहां यह बाइट्स की दस्तावेजी संख्या के बजाय कोडपृष्ठ 65001 के तहत वर्णों की संख्या देता है। यह 'chcp 65001' का कारण है जो विंडोज पर पर्ल, PHP और रूबी के तहत काम नहीं कर रहा है। पाइथन अपनी अलग बग से पीड़ित है। – hippietrail

2

क्या कोई भाषा यूनिकोड और क्रॉस-प्लेटफ़ॉर्म को ठीक से और पूरी तरह से करती है?

सी # यूनिकोड का व्यापक रूप से समर्थन करता है। इसकी मानक लाइब्रेरी (.NET Framework) में यूनिकोड के लिए भी उत्कृष्ट समर्थन है। क्रॉस-प्लेटफ़ॉर्म उचित है, लेकिन सही नहीं है: यह मोनो के माध्यम से और ज़ैमरिन के माध्यम से मोबाइल प्लेटफार्मों पर हासिल किया जाता है।

कमांड लाइन प्रोग्राम बहुत पोर्टेबल हैं लेकिन प्राचीन अवशेषों द्वारा खराब हो सकते हैं, जैसे एसएसएच टर्मिनल जिन्हें एक दशक या उससे अधिक के लिए अपडेट नहीं किया गया है।

सी # बहुत करीब हो जाता है:

यहाँ कुछ आदर्श स्यूडोकोड है

उत्पादन का
using System; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.OutputEncoding = System.Text.Encoding.UTF8; 
     Console.WriteLine("tést, тест, τεστ, ←↑→↓∏∑√∞①②③④, Bài viết chọn lọc"); 
    } 
} 

स्क्रीनशॉट (उपयोग Consolas या सब से ऊपर कैरेक्टर हैं कि एक और फ़ॉन्ट):

proof

बेशक सी # एक पटकथा भाषा नहीं है; यह काफी ज्यादा सब कुछ के दृष्टिकोण में काफी अलग है।

संबंधित मुद्दे