BOM(바이트 순서 표시) 없이 텍스트 파일을 쓰시겠습니까?
나는 VB를 사용하여 텍스트 파일을 만들려고 합니다.UTF8 인코딩을 사용하는 넷, BOM을 사용하지 않는 넷.누가 도와줄 수 있어요? 어떻게 하는 거죠?
UTF8 인코딩으로 파일을 쓸 수 있는데, 바이트 순서 표시를 어떻게 제거합니까?
edit1: 나는 이런 코드를 시도해 보았습니다;
Dim utf8 As New UTF8Encoding()
Dim utf8EmitBOM As New UTF8Encoding(True)
Dim strW As New StreamWriter("c:\temp\bom\1.html", True, utf8EmitBOM)
strW.Write(utf8EmitBOM.GetPreamble())
strW.WriteLine("hi there")
strW.Close()
Dim strw2 As New StreamWriter("c:\temp\bom\2.html", True, utf8)
strw2.Write(utf8.GetPreamble())
strw2.WriteLine("hi there")
strw2.Close()
1.html은 UTF8 인코딩으로만 생성되고 2.html은 ANSI 인코딩 형식으로 생성됩니다.
단순화된 접근 방식 - http://whatilearnttuday.blogspot.com/2011/10/write-text-files-without-byte-order.html
BOM(바이트 순서 표시)을 생략하려면 스트림에서 (BOM을 생성하도록 구성된) 이외의 인스턴스를 사용해야 합니다.이를 위한 쉬운 두 가지 방법이 있습니다.
적합한 인코딩 명시 지정:
생성자에게 다음을(를)
False
를 위해encoderShouldEmitUTF8Identifier
매개 변수패스 더
UTF8Encoding
스트림 생성자에 대한 인스턴스입니다.
' VB.NET:
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
sink.WriteLine("...")
End Using
// C#:
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
using (var sink = new StreamWriter("Foobar.txt", false, utf8WithoutBom))
{
sink.WriteLine("...");
}
기본 인코딩 사용:
공급하지 않는 경우Encoding
로.StreamWriter
의 건설자는 전혀,StreamWriter
는 기본적으로 BOM 없이 UTF8 인코딩을 사용하므로 다음도 마찬가지로 작동합니다.
' VB.NET:
Using sink As New StreamWriter("Foobar.txt")
sink.WriteLine("...")
End Using
// C#:
using (var sink = new StreamWriter("Foobar.txt"))
{
sink.WriteLine("...");
}
마지막으로, BOM을 생략하는 것은 UTF-16이 아닌 UTF-8에만 허용됩니다.
사용해 보십시오.
Encoding outputEnc = new UTF8Encoding(false); // create encoding with no BOM
TextWriter file = new StreamWriter(filePath, false, outputEnc); // open file with encoding
// write data here
file.Close(); // save and close it
그냥 단순히 방법을 사용합니다.WriteAllText
부터System.IO.File
.
이 메서드는 BOM(Byte-Order Mark) 없이 UTF-8 인코딩을 사용하므로 GetPreamble 메서드를 사용하면 빈 바이트 배열이 반환됩니다.파일의 시작 부분에 바이트 순서 표시와 같은 UTF-8 식별자를 포함해야 하는 경우 UTF8 인코딩으로 WriteAllText(String, String, Encoding) 메서드 오버로드를 사용합니다.
이와 관련하여 흥미로운 참고 사항: 이상하게도 시스템의 정적 "텍스트 만들기()" 메서드입니다.IO.파일 클래스는 BOM 없이 UTF-8 파일을 만듭니다.
일반적으로 이것은 버그의 원인이지만 당신의 경우 가장 간단한 해결책일 수 있습니다 :)
지정하지 않은 경우Encoding
새 기본값을 생성할 때Encoding
사용된 객체는 다음을 통해 생성됩니다.new UTF8Encoding(false, true)
.
따라서 인코딩을 제공할 필요가 없는 생성자를 BOM으로 사용하지 않고 텍스트 파일을 만들려면 다음과 같이 하십시오.
new StreamWriter(Stream)
new StreamWriter(String)
new StreamWriter(String, Boolean)
저는 로만 니키틴이 옳다고 생각합니다.생성자 인수의 의미가 뒤집힙니다.False는 BOM이 없음을 의미하고 BOM이 있으면 참 평균을 의미합니다.
비안시 문자를 포함하지 않는 BOM이 없는 파일은 ANSI 파일과 정확히 같기 때문에 ANSI 인코딩을 얻을 수 있습니다."안녕하세요" 문자열에서 특수 문자를 사용해 보면 ANSI 인코딩이 BOM 없이 변경되는 것을 볼 수 있습니다.
을 사용하지 않는
우리는 EPA에 XML 데이터를 제출해야 하며, 우리의 입력을 받는 그들의 애플리케이션은 BOM이 없는 UTF-8을 요구합니다.네, 일반 UTF-8은 모든 사람에게 허용되어야 하지만 EPA에는 허용되지 않습니다.이에 대한 답은 위의 댓글에 있습니다.로만 니키틴 감사합니다.
다음은 XML 인코딩을 위한 코드의 C# 스니펫입니다.
Encoding utf8noBOM = new UTF8Encoding(false);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = utf8noBOM;
…
using (XmlWriter xw = XmlWriter.Create(filePath, settings))
{
xDoc.WriteTo(xw);
xw.Flush();
}
이렇게 하면 출력 파일에서 세 개의 선행 문자가 실제로 제거되는지 확인하는 것은 오해의 소지가 있습니다.예를 들어 메모장++(www.notepad-plus-plus.org )을 사용하면 "Encode in ANSI"가 보고됩니다.대부분의 텍스트 편집자들은 BOM 문자가 UTF-8인지 확인할 것으로 예상합니다.WinHex(www.winhex.com )와 같은 바이너리 도구를 사용하여 이를 명확하게 확인할 수 있습니다.저는 이전과 이후의 차이를 찾고 있었기 때문에 Microsoft WinDiff 애플리케이션을 사용했습니다.
VB.Net Visual Basic의 경우 다음과 같이 작동합니다.
My.Computer.FileSystem.WriteAllText("FileName", Data, False, System.Text.Encoding.ASCII)
입력 텍스트에 바이트 순서 표시가 포함되어 있을 수 있습니다.그런 경우에는 쓰기 전에 삭제해야 합니다.
Dim sWriter As IO.StreamWriter = New IO.StreamWriter(shareworklist & "\" & getfilename() & ".txt", False, Encoding.Default)
원하는 결과를 제공합니다(제 생각에는).
언급URL : https://stackoverflow.com/questions/2437666/write-text-files-without-byte-order-mark-bom
'programing' 카테고리의 다른 글
Eclipse 출력 콘솔의 용량을 늘리려면 어떻게 해야 합니까? (0) | 2023.05.25 |
---|---|
PowerShell 스크립트가 실행되지 않는 이유는 무엇입니까? (0) | 2023.05.25 |
Postgre를 종료하는 방법SQL 명령줄 유틸리티: psql (0) | 2023.05.25 |
git 원격 다른 SSH 포트와 함께 추가 (0) | 2023.05.25 |
mongodb에서 중첩된 배열 업데이트 중 (0) | 2023.05.25 |