ভিজ্যুয়াল স্টুডিও প্রকল্পের সমস্ত ফাইলকে ইউটিএফ -8 হিসাবে সংরক্ষণ করুন


87

আমি ভাবছি ভিজ্যুয়াল স্টুডিও ২০০৮ প্রকল্পের সমস্ত ফাইল একটি নির্দিষ্ট অক্ষর এনকোডিংয়ে সংরক্ষণ করা সম্ভব কিনা। আমি মিশ্র এনকোডিংগুলির সাথে একটি সমাধান পেয়েছি এবং আমি সেগুলি সমস্তকে (স্বাক্ষর সহ ইউটিএফ -8) তৈরি করতে চাই।

আমি জানি যে কীভাবে একক ফাইলগুলি সংরক্ষণ করতে হয়, তবে কোনও প্রকল্পের সমস্ত ফাইল কীভাবে?


4
আপনার জানা উচিত যে আরসি সংকলক (কমপক্ষে অবিরত ভিজ্যুয়াল স্টুডিও ২০০৮) ইউটিএফ 8 ফাইল সমর্থন করে না - এই ফাইলগুলির জন্য আপনাকে ইউটিএফ 16 ব্যবহার করতে হবে।
বোগদান

এছাড়াও, GlobalSuppressions.csইউটিএফ -16।
ডেভিডআরআর

উত্তর:


74

যেহেতু আপনি ইতিমধ্যে ভিজ্যুয়াল স্টুডিওতে রয়েছেন তাই কেবল কোডটি লেখেন না কেন?

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

মাত্র তিন লাইনের কোড! আমি নিশ্চিত আপনি এটি এক মিনিটেরও কম সময়ে লিখতে পারবেন :-)


উপ-ডিরেক্টরি সম্পর্কে কি, যেমন। প্রচুর * .cs ফাইল সহ "সম্পত্তি" সাবডির?
রোমান স্টারকভ

4
সাব-ডাইরেক্টরিগুলি অন্তর্ভুক্ত করার জন্য "অনুসন্ধানঅপশন.এলডাইরেক্টরিজগুলি" প্যারামিটারগুলি প্রয়োজনীয়। আমি সেই অনুযায়ী কোডটি সম্পাদনা করেছি।
টিমউই

9
আমি এখন এটি চেষ্টা করেছি এবং এটি দুর্দান্ত কাজ করে। আমার কেবলমাত্র পরিবর্তন করতে হবে হ'ল এনকোডিংটি ব্যবহার করুন et গেটইনকোডিং (1252) = ওয়েস্টার্ন ইউরোপীয় (উইন্ডোজ) আমার লেখার অক্ষর (åäö) সংরক্ষণের জন্য ReadAllText এর দ্বিতীয় প্যারামিটার হিসাবে।
jesperlind

38

এটি কিছুটা সহায়ক হতে পারে।

মূল রেফারেন্সের কারণে লিঙ্কটি সরানো হয়েছে স্প্যাম সাইট দ্বারা ত্রুটিযুক্ত হওয়ার কারণে।

সংক্ষিপ্ত সংস্করণ: একটি ফাইল সম্পাদনা করুন, ফাইল -> উন্নত সংরক্ষণের বিকল্প নির্বাচন করুন। ইউটিএফ -8 এসকি তে পরিবর্তনের পরিবর্তে এটি ইউটিএফ -8 এ পরিবর্তন করুন। সম্পাদনা করুন: নিশ্চিত করুন যে আপনি এমন বিকল্পটি নির্বাচন করেছেন যা কোনও বাইট-অর্ডার-মার্কার (বিওএম) না বলে

কোড পৃষ্ঠা সেট করুন এবং ঠিক আছে চাপুন। এটি বর্তমান ফাইলের অতীতে অবিচ্ছিন্ন বলে মনে হচ্ছে।


9
এটিকে "ইউনিকোড (স্বাক্ষর ছাড়াই ইউটিএফ -8)" এ পরিবর্তন করুন, অন্যথায় এটি ফাইলের শুরুতে একটি বিওএম যুক্ত করবে।
চক লে বাট

11
পাশাপাশি সম্মত হয়েছে ... কেউ আমাদের বিওএম স্থাপন করেছে।
ট্র্যাকার 1

12

পাওয়ারশেলে আপনার যদি এটি করতে হয় তবে আমার ছোট পদক্ষেপটি এখানে:

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);
    }
}

ফাইলটি ইউটিএফ 8-স্বাক্ষরিত হিসাবে ভিজ্যুয়াল স্টুডিওতে উন্নত সংরক্ষণের বিকল্পগুলিতে থাকবে
জেনসন-বোতাম-ইভেন্ট

4
ইউনিকোড অক্ষরগুলি কার্যকর হওয়ার পরে হারিয়ে যায়। উদাহরণস্বরূপ, Ü হয়ে যায় এবং © হয়ে যায়
ডের_মিস্টার

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)

এটি ধরে নিয়েছে যে "স্বাক্ষর সহ ইউটিএফ -8" এ থাকা সমস্ত ফাইল এএনএসআই কোড পৃষ্ঠাতে নেই - এটি ভিএস ২০০৮ দৃশ্যত ধরেও ধরেছিল। যদি আপনি জানেন যে কিছু ফাইলের আলাদা আলাদা এনকোডিং রয়েছে তবে আপনাকে এই এনকোডিংগুলি নির্দিষ্ট করতে হবে।


5

সি #:
1 ব্যবহার করে ) একটি নতুন কনসোল অ্যাপ্লিকেশন তৈরি করুন, তারপরে মজিলা ইউনিভার্সাল চরসেট ডিটেক্টর ইনস্টল করুন
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;
    }
}

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)


1

আপনার সমাধানগুলির জন্য ধন্যবাদ, এই কোডটি আমার পক্ষে কাজ করেছে:

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

1

আপনি যদি এই ধরণের ত্রুটি এড়াতে চান:

এখানে চিত্র বর্ণনা লিখুন

এই নিম্নলিখিত কোড ব্যবহার করুন:

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 নম্বর এনকোডিং হ'ল ডিফল্ট উইন্ডোজ এনকোডিং যা আপনার ফাইলগুলি সংরক্ষণ করতে ভিজ্যুয়াল স্টুডিও দ্বারা ব্যবহৃত হয়।


1

UTF-8-BOM থেকে UTF-8 এ রূপান্তর করুন

উপর নির্মাণের rasx এর উত্তর , এখানে একটি PowerShell ফাংশন আপনার বর্তমান ফাইল ইতিমধ্যে BOM ছাড়া UTF-8- হল UTF-8 (কিন্তু হয়তো BOM সঙ্গে) এবং তাদের ধর্মান্তরিত এনকোড করা হয়, অতএব বিদ্যমান ইউনিকোড অক্ষর সংরক্ষণের অনুমান করে।

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, [Text.Encoding]::UTF8);
        [Text.Encoding]$e = New-Object -TypeName Text.UTF8Encoding -ArgumentList ($false);
        [IO.File]::WriteAllText($file, $s, $e);
    }
}

0

ভিজুয়াল স্টুডিওতে স্বয়ংক্রিয়ভাবে এটি করার কোনও উপায় না হলে আমি কেবল এই পরামর্শটি দিচ্ছি (আমি নিশ্চিত না যে এটি কাজ করবে):

  1. আপনার প্রকল্পে classの 不 自由 な ハ ッ キ キ ンnamed নামে একটি শ্রেণি তৈরি করুন (বা কিছু অন্যান্য ইউনিকোড পাঠ্য যা ভিজ্যুয়াল স্টুডিওটিকে ইউটিএফ -8 হিসাবে এনকোড করতে বাধ্য করবে)।
  2. "মাইপ্রজেক্ট ব্যবহার করে যুক্ত করুন足 の 不 不 な な ハ キ キ ン グ;" প্রতিটি ফাইলের শীর্ষে। "সিস্টেম.টেক্সট ব্যবহার করে" এর একটি বিশ্বব্যাপী প্রতিস্থাপন করে আপনার সবকিছু করা উচিত; "সিস্টেম.টেক্সট ব্যবহার করে; মাইপ্রজেক্ট ব্যবহার করে withの 不 自由 な ハ ッ キ ン ンwith;" সহ
  3. সব কিছু সংরক্ষণ করুন। আপনি "ইউটিএফ -8 ব্যবহার করে আপনি কি X.cs সংরক্ষণ করতে চান?" এর একটি দীর্ঘ স্ট্রিং পেতে পারেন? বার্তা বা কিছু।

10
দুহ, আপনি যদি সত্যিই এটি আটকে রাখতে চান তবে এই চরিত্রগুলির সাথে একটি মন্তব্য যুক্ত করুন । কমপক্ষে এটি পরবর্তী বারে মুছে ফেলা হবে না কেউ সম্পাদনা মেনুতে "অব্যবহৃত ব্যবহারগুলি সরান"।
রোমান স্টারকভ

4
"মাইপ্রজেক্ট ব্যবহার করে যুক্ত করুন 足 の 不 不 な な ハ キ キ ン グ;" প্রতিটি ফাইলের শীর্ষে। - আমি মনে করি এই প্রশ্নের মূল কারণ ছিল, প্রতিটি ফাইল আলাদাভাবে খুলতে হবে না।
Krisztián Balla

0

সমাধানটি ভিএস ২০০৮ থেকে ভিএস ২০১৫ এ রূপান্তর করার পরে অভিজ্ঞ এনকোডিংয়ের সমস্যা। রূপান্তর করার পরে সমস্ত প্রকল্প ফাইলগুলি এএনএসআইতে এনকোড করা হয়েছিল তবে সেগুলিতে ইউটিএফ 8 সামগ্রী রয়েছে এবং ভিএস ২০১৫ এ এটিএসআই ফাইল হিসাবে পুনরায় সংযুক্ত করা হয়েছিল। অনেক রূপান্তর কৌশল চেষ্টা করেও কেবল এই সমাধানটিতে কাজ করে।

 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);
 }

0

আইটেমটি ভিজ্যুয়াল স্টুডিও 2017 এর মেনু থেকে সরানো হয়েছে আপনি এখনও ফাইল-> হিসাবে সংরক্ষণ করুন -> এর মাধ্যমে কার্যকারিতা অ্যাক্সেস করতে পারবেন তারপরে সেভ বোতামের নীচে তীরটি ক্লিক করে এবং "এনকোডিং সহ সংরক্ষণ করুন ..." ক্লিক করুন।

আপনি চাইলে সরঞ্জাম-> কাস্টমাইজ-> কমান্ডের মাধ্যমে ফাইল মেনুতেও এটি আবার যুক্ত করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.