[解決済み] BOM(バイトオーダーマーク)なしでテキストファイルを書き込むには?
質問
VB.Netを使用して、BOMなしで、UTF8エンコーディングのテキストファイルを作成しようとしています。これを行う方法、誰か私を助けることができますか?
私はUTF8エンコーディングでファイルを書くことができますが、それからByte Order Markを削除する方法を教えてください。
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) を省略するためには、ストリームで
UTF8Encoding
以外の
System.Text.Encoding.UTF8
(BOMを生成するように設定されています)。これを行うには、2つの簡単な方法があります。
1. 適切なエンコーディングを明示的に指定する。
-
を呼び出す。
UTF8Encoding
コンストラクタ で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("...");
}
2. デフォルトエンコーディングを使用する。
を指定しない場合は
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-8に対してのみ許され、UTF-16に対しては許されないことに注意してください。
関連
-
[解決済み] public subの呼び出し時に、非共有メンバーの参照にオブジェクト参照が必要となる
-
[解決済み] NUnit TestCaseのパラメータとして二重引用符をエスケープするにはどうすればよいですか?
-
[解決済み] 文字列 "" を 'Integer' 型に変換するのは無効です。
-
[解決済み] YesNoCancel付きMessageBox - NoとCancelが同じイベントをトリガーする
-
[解決済み] オブジェクト参照がオブジェクトのインスタンスに設定されていない [重複] 。
-
[解決済み] vbLf、vbCrLf、vbCrの定数の違いについて
-
[解決済み] UTF-8とBOMなしUTF-8の違いは何ですか?
-
[解決済み】PowerShellでBOMなしのUTF-8でファイルを書き込む場合
-
[解決済み] C#の'?'演算子に相当するVB.NETはありますか?
-
[解決済み] VB.NETにおけるクラスとモジュールの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] VB.netの開閉フォーム
-
[解決済み] NUnit TestCaseのパラメータとして二重引用符をエスケープするにはどうすればよいですか?
-
[解決済み] VB.NETで<DllImport>を使用するには?
-
[解決済み] "文字列 "" から型 'Double' への変換は無効です。" VBでは
-
[解決済み] vb.netで2つのタイムスパン間の時差を取得する
-
[解決済み] VB.NETで画像のリサイズをする
-
[解決済み] インデックスが配列の範囲外であった
-
[解決済み] 文字列 "" を 'Integer' 型に変換するのは無効です。
-
[解決済み] オブジェクト参照がオブジェクトのインスタンスに設定されていない [重複] 。
-
[解決済み] VB.NETにおけるクラスとモジュールの比較