2008-11-11 15 views
73

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

मुझे पता है कि एकल फ़ाइलों को कैसे सहेजना है, लेकिन किसी प्रोजेक्ट में सभी फ़ाइलों के बारे में कैसे?

+1

आपको पता होना चाहिए कि आरसी कंपाइलर (कम से कम विजुअल स्टूडियो 2008) यूटीएफ 8 फाइलों का समर्थन नहीं करता है - इन फ़ाइलों के लिए आपको यूटीएफ 16 का उपयोग करना होगा। – bogdan

+0

इसके अलावा, ['GlobalSuppressions.cs'] (http://stackoverflow.com/q/33614568/1497596) यूटीएफ -16 है। – DavidRR

उत्तर

61

चूंकि आप पहले से ही विजुअल स्टूडियो में हैं, क्यों न केवल कोड लिखें?

foreach (var f in new DirectoryInfo(@"...").GetFiles("*.cs", SearchOption.AllDirectories)) { 
    string s = File.ReadAllText(f.FullName); 
    File.WriteAllText (f.FullName, s, Encoding.UTF8); 
} 

कोड की केवल तीन पंक्तियां!

Function Write-Utf8([string] $path, [string] $filter='*.*') 
{ 
    [IO.SearchOption] $option = [IO.SearchOption]::AllDirectories; 
    [String[]] $files = [IO.Directory]::GetFiles((Get-Item $path).FullName, $filter, $option); 
    foreach($file in $files) 
    { 
     "Writing $file..."; 
     [String]$s = [IO.File]::ReadAllText($file); 
     [IO.File]::WriteAllText($file, $s, [Text.Encoding]::UTF8); 
    } 
} 
+0

उपनिर्देशिकाओं के बारे में क्या, उदाहरण के लिए। * गुणों "के साथ" गुण "subdir? –

+3

"SearchOption.AllDirectories" पैरामीटर सब कुछ है जो उपनिर्देशिका को शामिल करना आवश्यक है। मैंने तदनुसार कोड संपादित किया है। – Timwi

+7

मैंने अब कोशिश की है और यह बहुत अच्छा काम करता है। केवल एक चीज जिसे मैं संशोधित करना था, मेरे स्वीडिश वर्णों (åäö) को संरक्षित करने के लिए ReadAllText के दूसरे पैरामीटर के रूप में एन्कोडिंग। गेटएन्कोडिंग (1252) = पश्चिमी यूरोपीय (विंडोज) का उपयोग करना था। – jesperlind

0

मैं केवल इस सुझाव मामले में (मैं भी यकीन है कि यह काम करेगा नहीं कर रहा हूँ) स्वचालित रूप से दृश्य स्टूडियो में ऐसा करने के लिए कोई रास्ता नहीं है की पेशकश कर रहा हूँ:

  1. नामित अपनी परियोजना में एक कक्षा बनाएं 足の 不 自由 な ハ ッ キ ン グ (या कुछ अन्य यूनिकोड टेक्स्ट जो विजुअल स्टूडियो को यूटीएफ -8 के रूप में एन्कोड करने के लिए मजबूर करेंगे)।
  2. "MyProject का उपयोग करके 足 の 不 自由 な ハ ッ キ ン グ;" प्रत्येक फाइल के शीर्ष पर। आप "System.Text;" का वैश्विक प्रतिस्थापन करके सबकुछ पर ऐसा करने में सक्षम होना चाहिए "System.Text का उपयोग करके; MyProject का उपयोग कर 足 の 不 自由 な ハ ッ キ ン グ;"।
  3. सब कुछ बचाएं। आपको एक लंबी स्ट्रिंग मिल सकती है "क्या आप यूटीएफ -8 का उपयोग कर X.cs को सहेजना चाहते हैं?" संदेश या कुछ।
+10

दुह, अगर आप वास्तव में इसे बनाना चाहते हैं तो बस उन पात्रों के साथ * टिप्पणी * जोड़ें। अगली बार जब कोई संपादन मेनू में "अप्रयुक्त उपयोग हटाएं" जाता है तो कम से कम इसे हटाया नहीं जाएगा। –

+5

"MyProject का उपयोग करके जोड़ें। 足 の 不 自由 な ハ ッ キ ン グ;" प्रत्येक फाइल के शीर्ष पर। - मुझे लगता है कि सवाल का मुख्य कारण था कि प्रत्येक फ़ाइल को अलग से खोलना न पड़े। –

7

मैं फ़ाइलों को प्रोग्रामेटिक रूप से (वीएस के बाहर) रूपांतरित कर दूंगा, उदा। एक अजगर स्क्रिप्ट का उपयोग: "हस्ताक्षर के साथ UTF-8" नहीं में

import glob, codecs 

for f in glob.glob("*.py"): 
    data = open("f", "rb").read() 
    if data.startswith(codecs.BOM_UTF8): 
     # Already UTF-8 
     continue 
    # else assume ANSI code page 
    data = data.decode("mbcs") 
    data = codecs.BOM_UTF8 + data.encode("utf-8") 
    open("f", "wb").write(data) 

इसमें सभी फ़ाइलें मान लिया गया एएनएसआई कोड पृष्ठ में हैं - यह एक ही क्या 2008 जाहिरा तौर पर भी मान लिया है। यदि आप जानते हैं कि कुछ फ़ाइलों में अभी तक अलग-अलग एन्कोडिंग हैं, तो आपको यह निर्दिष्ट करना होगा कि ये एन्कोडिंग क्या हैं।

10

मामले में आप PowerShell में ऐसा करने की जरूरत है, यहाँ मेरी छोटी कदम है मेरे लिए काम किया है:

Dim s As String = "" 
Dim direc As DirectoryInfo = New DirectoryInfo("Your Directory path") 

For Each fi As FileInfo In direc.GetFiles("*.vb", SearchOption.AllDirectories) 
    s = File.ReadAllText(fi.FullName, System.Text.Encoding.Default) 
    File.WriteAllText(fi.FullName, s, System.Text.Encoding.Unicode) 
Next 
+0

फ़ाइल दृश्य स्टूडियो में यूटीएफ 8-साइन इन के रूप में रहता है उन्नत सहेजें विकल्प –

+1

निष्पादन के बाद यूनिकोड वर्ण खो गए हैं। उदाहरण के लिए, Ü becomes बन जाता है और © बन जाता है। –

1

अपने समाधान के लिए धन्यवाद, इस कोड: मुझे यकीन है कि आप एक मिनट से भी कम में यह लिख सकते हैं :-)

36

यह कुछ मदद की हो सकती है।

लिंक स्पैम साइट द्वारा मूल संदर्भ के कारण हटा दिया गया।

लघु संस्करण: एक फ़ाइल संपादित करें, फ़ाइल -> उन्नत सहेजें विकल्प का चयन करें। यूसीएफ -8 को असीसी में बदलने के बजाय, इसे यूटीएफ -8 में बदलें। संपादित करें: सुनिश्चित करें कि आप विकल्प है कि कोई बाइट-आदेश-मार्कर (बीओएम)

सेट कोड पेज & ठीक मारा कहते हैं का चयन करें। ऐसा लगता है कि वर्तमान फाइल से पहले ही जारी है।

+8

इसे "यूनिकोड (यूटीएफ -8 हस्ताक्षर के बिना)" में बदलें, अन्यथा यह फ़ाइल की शुरुआत में बीओएम जोड़ देगा। –

+9

भी सहमत हुए ... किसी ने हमें बीओएम स्थापित किया। – Tracker1

1

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

और यहां कार्य है।

Function ChangeFileEncoding(pPathFolder As String, pExtension As String, pDirOption As IO.SearchOption) As Integer 

    Dim Counter As Integer 
    Dim s As String 
    Dim reader As IO.StreamReader 
    Dim gEnc As Text.Encoding 
    Dim direc As IO.DirectoryInfo = New IO.DirectoryInfo(pPathFolder) 
    For Each fi As IO.FileInfo In direc.GetFiles(pExtension, pDirOption) 
     s = "" 
     reader = New IO.StreamReader(fi.FullName, Text.Encoding.Default, True) 
     s = reader.ReadToEnd 
     gEnc = reader.CurrentEncoding 
     reader.Close() 

     If (gEnc.EncodingName <> Text.Encoding.UTF8.EncodingName) Then 
      s = IO.File.ReadAllText(fi.FullName, gEnc) 
      IO.File.WriteAllText(fi.FullName, s, System.Text.Encoding.UTF8) 
      Counter += 1 
      Response.Write("<br>Saved #" & Counter & ": " & fi.FullName & " - <i>Encoding was: " & gEnc.EncodingName & "</i>") 
     End If 
    Next 

    Return Counter 
End Function 

ऐसा लगता है कि .aspx फ़ाइल में रखा और फिर कहा जाता है कर सकते हैं:

ChangeFileEncoding("C:\temp\test", "*.ascx", IO.SearchOption.TopDirectoryOnly) 
3

का प्रयोग सी #:
1) एक नया कंसोल अनुप्रयोग बनाएं, फिर Mozilla Universal Charset Detectorइंस्टॉल करें 2) भागो कोड:

static void Main(string[] args) 
{ 
    const string targetEncoding = "utf-8"; 
    foreach (var f in new DirectoryInfo(@"<your project's path>").GetFiles("*.cs", SearchOption.AllDirectories)) 
    { 
     var fileEnc = GetEncoding(f.FullName); 
     if (fileEnc != null && !string.Equals(fileEnc, targetEncoding, StringComparison.OrdinalIgnoreCase)) 
     { 
      var str = File.ReadAllText(f.FullName, Encoding.GetEncoding(fileEnc)); 
      File.WriteAllText(f.FullName, str, Encoding.GetEncoding(targetEncoding)); 
     } 
    } 
    Console.WriteLine("Done."); 
    Console.ReadKey(); 
} 

private static string GetEncoding(string filename) 
{ 
    using (var fs = File.OpenRead(filename)) 
    { 
     var cdet = new Ude.CharsetDetector(); 
     cdet.Feed(fs); 
     cdet.DataEnd(); 
     if (cdet.Charset != null) 
      Console.WriteLine("Charset: {0}, confidence: {1} : " + filename, cdet.Charset, cdet.Confidence); 
     else 
      Console.WriteLine("Detection failed: " + filename); 
     return cdet.Charset; 
    } 
} 
0

VS2015 के लिए VS2008 से समाधान परिवर्तित करने के बाद अनुभवी एन्कोडिंग समस्याओं। रूपांतरण के बाद सभी प्रोजेक्ट फ़ाइलों को एएनएसआई में एन्कोड किया गया था, लेकिन उनमें यूटीएफ 8 सामग्री थी और वीएस2015 में एएनएसआई फाइलों के रूप में पुन: स्थापित किया गया था। कई रूपांतरण रणनीति का प्रयास किया, लेकिन केवल इस समाधान का काम किया।

Encoding encoding = Encoding.Default; 
String original = String.Empty; 
foreach (var f in new DirectoryInfo(path).GetFiles("*.cs", SearchOption.AllDirectories)) 
{ 
    using (StreamReader sr = new StreamReader(f.FullName, Encoding.Default)) 
    { 
     original = sr.ReadToEnd(); 
     encoding = sr.CurrentEncoding; 
     sr.Close(); 
    } 
    if (encoding == Encoding.UTF8) 
     continue; 
    byte[] encBytes = encoding.GetBytes(original); 
    byte[] utf8Bytes = Encoding.Convert(encoding, Encoding.UTF8, encBytes); 
    var utf8Text = Encoding.UTF8.GetString(utf8Bytes); 

    File.WriteAllText(f.FullName, utf8Text, Encoding.UTF8); 
} 
1

आप इस प्रकार की त्रुटि से बचना चाहते हैं:

enter image description here

उपयोग इस निम्नलिखित कोड:

foreach (var f in new DirectoryInfo(@"....").GetFiles("*.cs", SearchOption.AllDirectories)) 
      { 
       string s = File.ReadAllText(f.FullName, Encoding.GetEncoding(1252)); 
       File.WriteAllText(f.FullName, s, Encoding.UTF8); 
      } 

एन्कोडिंग संख्या 1252 दृश्य स्टूडियो द्वारा इस्तेमाल किया डिफ़ॉल्ट Windows एन्कोडिंग है अपनी फाइलों को बचाने के लिए।

0

इसे उपरोक्त संस्करण को अनुकूलित करने के लिए अनुकूलित किया गया है।

// important! create a utf8 encoding that explicitly writes no BOM    
var utf8nobom = new UTF8Encoding(false); 
foreach (var f in new DirectoryInfo(dir).GetFiles("*.*", SearchOption.AllDirectories)) 
{ 
    string text = File.ReadAllText(f.FullName); 
    File.WriteAllText(f.FullName, text, utf8nobom); 
} 
संबंधित मुद्दे