Visual Studio 2008 프로젝트의 모든 파일을 특정 문자 인코딩으로 저장할 수 있는지 궁금합니다. 혼합 인코딩을 사용하는 솔루션이 있으며 모두 동일하게 만들고 싶습니다 (서명이있는 UTF-8).
단일 파일을 저장하는 방법을 알고 있지만 프로젝트의 모든 파일은 어떻습니까?
Visual Studio 2008 프로젝트의 모든 파일을 특정 문자 인코딩으로 저장할 수 있는지 궁금합니다. 혼합 인코딩을 사용하는 솔루션이 있으며 모두 동일하게 만들고 싶습니다 (서명이있는 UTF-8).
단일 파일을 저장하는 방법을 알고 있지만 프로젝트의 모든 파일은 어떻습니까?
GlobalSuppressions.cs
UTF-16입니다.
답변:
이미 Visual Studio를 사용하고 있으므로 단순히 코드를 작성하지 않는 이유는 무엇입니까?
foreach (var f in new DirectoryInfo(@"...").GetFiles("*.cs", SearchOption.AllDirectories)) {
string s = File.ReadAllText(f.FullName);
File.WriteAllText (f.FullName, s, Encoding.UTF8);
}
단 3 줄의 코드! 나는 당신이 1 분 안에 이것을 쓸 수 있다고 확신합니다 :-)
도움이 될 수 있습니다.
스팸 사이트에 의해 원본 참조가 손상되어 링크가 제거되었습니다.
짧은 버전 : 하나의 파일을 편집하고 파일-> 고급 저장 옵션을 선택합니다. UTF-8을 Ascii로 변경하는 대신 UTF-8로 변경하십시오. 편집 : 바이트 순서 마커 (BOM) 없음이라는 옵션을 선택했는지 확인하십시오.
코드 페이지를 설정하고 확인을 누르십시오. 현재 파일을 지나서 지속되는 것 같습니다.
PowerShell에서이 작업을 수행해야하는 경우 여기에 약간의 움직임이 있습니다.
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);
}
}
예를 들어 Python 스크립트를 사용하여 프로그래밍 방식 (VS 외부)으로 파일을 변환합니다.
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)
이것은 "서명이있는 UTF-8"에없는 모든 파일이 ANSI 코드 페이지에 있다고 가정합니다. 이것은 VS 2008에서도 분명히 가정하는 것과 동일합니다. 일부 파일의 인코딩이 다른 것을 알고 있다면 이러한 인코딩이 무엇인지 지정해야합니다.
C # 사용 :
1) 새 ConsoleApplication을 만든 다음 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;
}
}
asp.net으로 작성된 인코딩 파일을 변경하는 기능을 만들었습니다. 나는 많이 검색했다. 그리고이 페이지의 아이디어와 코드도 사용했습니다. 감사합니다.
그리고 여기에 기능이 있습니다.
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)
VS에서 TFS를 사용하는 경우 : http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx 예 :
tf checkout -r -type:utf-8 src/*.aspx
귀하의 솔루션에 감사드립니다.이 코드는 저에게 효과적이었습니다.
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
이러한 유형의 오류를 방지하려면 다음을 수행하십시오.
다음 코드를 사용하십시오.
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는 Visual Studio에서 파일을 저장하는 데 사용하는 기본 Windows 인코딩입니다.
rasx의 답변 을 바탕으로 현재 파일이 이미 UTF-8 (BOM 포함)으로 인코딩되어 있고 BOM이없는 UTF-8로 변환하여 기존 유니 코드 문자를 보존한다고 가정하는 PowerShell 함수가 있습니다.
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);
}
}
Visual Studio에서 자동으로이 작업을 수행 할 수있는 방법이없는 경우에만이 제안을 제공하고 있습니다 (이게 작동할지 확신 할 수 없습니다).
솔루션을 VS2008에서 VS2015로 변환 한 후 인코딩 문제가 발생했습니다. 변환 후 모든 프로젝트 파일은 ANSI로 인코딩되었지만 UTF8 콘텐츠를 포함하고 VS2015에서 ANSI 파일로 다시 인식되었습니다. 많은 변환 전술을 시도했지만이 솔루션 만 작동했습니다.
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);
}
항목이 Visual Studio 2017의 메뉴에서 제거되었습니다. 파일-> 다른 이름으로 저장-> 저장 버튼의 아래쪽 화살표를 클릭하고 "인코딩으로 저장 ..."을 클릭하여 기능에 계속 액세스 할 수 있습니다.
원하는 경우 도구-> 사용자 지정-> 명령을 통해 파일 메뉴에 다시 추가 할 수도 있습니다.