2009-04-15 17 views
18

का उपयोग कर यूटीएफ -16 से यूटीएफ -8 में एक्सएमएल कनवर्ट करना यूटीएफ 16 से यूटीएफ 8 एन्कोडेड फ़ाइल में एक्सएमएल को कनवर्ट करने का सबसे आसान तरीका क्या है?पावरशेल

उत्तर

14

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

$files = get-ChildItem "*.xml" 
foreach ($file in $files) 
{ 
    [System.Xml.XmlDocument]$doc = new-object System.Xml.XmlDocument; 
    $doc.set_PreserveWhiteSpace($true); 
    $doc.Load($file); 

    $root = $doc.get_DocumentElement(); 
    $xml = $root.get_outerXml(); 
    $xml = '<?xml version="1.0" encoding="utf-8"?>' + $xml 

    $newFile = $file.Name + ".new" 
    Set-Content -Encoding UTF8 $newFile $xml; 
} 
+0

क्या आप कहीं से बचाने के लिए एन्कोडिंग को स्पष्ट रूप से सेट नहीं करना चाहिए? – Joey

+0

अगर मुझे पता था कि मैं कैसे करूंगा। हालांकि यह डिफ़ॉल्ट है। –

+0

-एन्कोडिंग पैरामीटर। – JasonMArcher

13

ठीक है, मुझे लगता है कि सबसे आसान तरीका है बस के बारे में है कि क्या फ़ाइल XML है या नहीं परवाह नहीं करने के लिए और बस कन्वर्ट है:

Get-Content file.foo -Encoding Unicode | Set-Content -Encoding UTF8 newfile.foo 

यह केवल एक्सएमएल के लिए काम करेंगे जब है वहाँ कोई

<?xml version="1.0" encoding="UTF-16"?> 

लाइन।

+4

यदि आप कोई नई फ़ाइल बनाये बिना इसे करना चाहते हैं, तो आप प्राप्त सामग्री को ब्रांड्स में लपेट सकते हैं: (Get-content File.foo) | सेट-कंटेंट-एन्कोडिंग यूटीएफ 8 फाइल.फू – Jaykul

+0

निर्देशिका और उपनिर्देशिका में फ़ाइलों के लिए आप यह कैसे करते हैं? – stormwild

+1

'gci -rec -fi * | % {(जीसी $ _ -enc यूनिकोड) | सेट-कंटेंट -एनसी यूटीएफ 8 $ _। पूर्णनाम} '। वास्तव में काफी सरल, वास्तव में। – Joey

8

इस समाधान एक XmlWriter का उपयोग करता है का प्रयास करें:

$encoding="UTF-8" # most encoding should work 
$files = get-ChildItem "*.xml" 
foreach ($file in $files) 
{ 
    [xml] $xmlDoc = get-content $file 
    $xmlDoc.xml = $($xmlDoc.CreateXmlDeclaration("1.0",$encoding,"")).Value 
    $xmlDoc.save($file.FullName)  
} 

आप CreateXmlDeclaration के बारे में अधिक विवरण के लिए XMLDocument को देखने के लिए चाहते हो सकता है।

+0

इतने संक्षिप्त, तकनीकी रूप से बेहतर, ऐसे पुराने प्रश्न का उत्तर देने के लिए बहुत बहुत धन्यवाद! – gimpf

+0

मुझे इसे पूरा करना पड़ा और मुझे यह प्रश्न देखने से पहले भी यह समाधान मिला। मुझे लगा कि यह पेशकश करना सामान्य था। कम प्रयास के साथ कोई भी फाइलों के एन्कोडिंग को परिवर्तित करते समय प्रतिलिपि बनाने के लिए इसका उपयोग कर सकता है। सादर। – LMA1980