2010-05-25 19 views
7

को स्वीकार करने के लिए मुझे पावरशेल के तहत मूल एप्लिकेशन का आउटपुट प्राप्त करने की आवश्यकता है। समस्या यह है कि आउटपुट को यूटीएफ -8 (कोई बीओएम) के साथ एन्कोड किया गया है, जो पावरशेल पहचान नहीं पाता है और केवल उन फंकी यूटीएफ वर्णों को सीधे यूनिकोड में परिवर्तित करता है।इनपुट एन्कोडिंग: यूटीएफ -8

मुझे पावरशेल में $OutputEncoding चर है, लेकिन यह इनपुट डेटा को प्रभावित नहीं करता है।

अच्छा ओल 'आइकनव कोई मदद नहीं है, क्योंकि यह अनावश्यक यूटीएफ 8-एएस-एएससीआईआई => अगले पाइपलाइन सदस्य डेटा प्राप्त करने से पहले यूनिकोड रूपांतरण होता है।

+0

आप अपनी क्या प्राप्त करना चाहते का एक नमूना दे सकते हैं? यदि आप फ़ाइलों का उपयोग कर रहे हैं या यदि आप स्क्रीन पर कुछ डेटा दिखाना चाहते हैं तो उत्तर अलग हो सकता है ... –

+0

मैं इसे और अधिक स्पष्ट कैसे कर सकता हूं? "./program-that-outputs-utf8> 1.txt" - काम नहीं करता है, "./program-that-outputs-utf8 | out-file -enc utf8 1.txt" - या तो काम नहीं करता है। सटीक कार्यक्रम और सटीक डेटा आपको कुछ भी नहीं बताएगा। – Andy

+2

वह टिप्पणी इसे और स्पष्ट बनाती है। –

उत्तर

12

मैं नीचे कार्यक्रम (stdout.cpp - सीएल stdout.cpp) के साथ अब समस्या का हल नहीं:

PS> fhex foo.txt 

Address: 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII 
-------- ----------------------------------------------- ---------------- 
00000000 EF BB BF 41 53 43 49 49 20 6F 75 74 70 75 74 0D ...ASCII output. 
00000010 9F E2 95 9B E2 95 A3 0D 0A      ......... 

ध्यान दें कि fhex:

#include <stdio.h> 

void main() 
{ 
    char bytes[] = { 0x41, 0x53, 0x43, 0x49, 
        0x49, 0x20, 0x6F, 0x75, 
        0x74, 0x70, 0x75, 0x74, 
        0xE1, 0xBE, 0xB9}; 

    for (int i = 0; i < 15; i++) 
    { 
     printf("%c", bytes[i]); 
    }     
} 

और | Out-File -enc UTF8 foo.txt के माध्यम से चल रहा निरर्थक शब्द देता है PSCX उपयोगिता है।

अद्यतन: पता लगा कि कैसे इस काम करने के लिए प्राप्त करने के लिए:

$enc = [Console]::OutputEncoding 
[Console]::OutputEncoding = [text.encoding]::utf8 
.\stdout.exe | out-file fubar3.txt -enc utf8 
fhex .\fubar3.txt 

Address: 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII 
-------- ----------------------------------------------- ---------------- 
00000000 EF BB BF 41 53 43 49 49 20 6F 75 74 70 75 74 E1 ...ASCII output. 
00000010 BE B9 0D 0A          .... 

[Console]::OutputEncoding = $enc 
+0

कितना आसान :) यह उदाहरण दिखाता है कि कुछ मामलों में एक को वास्तव में .NET पता होना चाहिए। बस पॉश ज्ञान पर्याप्त नहीं है ... – stej

-2

अपने लक्ष्य powershell में अपनी मूल आदेश से डेटा की प्रक्रिया करने के लिए है, तो आप की कोशिश कर सकते

./program-that-outputs-utf8 > temp.txt 
get-content temp.txt -Encoding utf8 | (do_whatever) 
+1

यह काम नहीं करता है। देखो, अंततः पावरहेल प्रोग्राम से सभी डेटा को डीकोड करता है-आउटपुट-यूटीएफ 8 जैसे कि यह एएससीआईआई था, प्रभावी ढंग से यूटीएफ जीबीबरिश (और असली वर्ण नहीं है कि यह गिब्बरिश प्रतिनिधित्व करता है) _UNICODE_ तारों में। फिर, अगर मैं ऑपरेटर का उपयोग करता हूं, तो यह यूटीएफ -16 में _THAT_ गड़बड़ी को एन्कोड करेगा। – Andy

0

Probabry आप "chcp 65001" निष्पादित करने के लिए (PowerShell.exe के फ़ॉन्ट को संशोधित करने के बाद) की जरूरत है।
यह आदेश PSISE के साथ उपलब्ध है।

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