ymm4-plugin-document
読み取り中…
検索中…
一致する文字列を見つけられません
YukkuriMovieMaker.Commons.EncodingChecker クラス

ファイルのエンコーディングを判別するためのユーティリティクラスです。 [詳解]

静的公開メンバ関数

static IEnumerable< Encoding > GetAvailableEncodings (Stream stream)
 指定されたストリームから読み取り可能なエンコーディングのリストを取得します。
static IEnumerable< Encoding > GetAvailableEncodings (byte[] bytes)
 指定されたバイト配列から読み取り可能なエンコーディングのリストを取得します。

詳解

ファイルのエンコーディングを判別するためのユーティリティクラスです。

このクラスは、バイト配列やストリームから、その内容がどのエンコーディングで記述されているかを推測する機能を提供します。 BOM (Byte Order Mark) の有無や、指定されたエンコーディングでデコード・再エンコードした際に元のバイト配列と一致するかどうかを検証することで、 信頼性の高いエンコーディング判別を試みます。

メソッド詳解

◆ GetAvailableEncodings() [1/2]

IEnumerable< Encoding > YukkuriMovieMaker.Commons.EncodingChecker.GetAvailableEncodings ( byte[] bytes)
static

指定されたバイト配列から読み取り可能なエンコーディングのリストを取得します。

引数
bytesエンコーディングを判別するバイト配列。
戻り値
利用可能なエンコーディングのリスト。判別できなかった場合は空のリストを返します。

内部的には、事前に定義された複数のエンコーディングに対して、バイトオーダーマーク (BOM) の有無と、 デコード・再エンコードの可逆性をチェックすることで、最適なエンコーディングを推測します。 結果は、デコード後のテキスト長が長いもの(より多くの文字を正しく表現できるもの)から順にソートされます。

// バイト配列からエンコーディングを判別する例
byte[] utf8Bytes = Encoding.UTF8.GetBytes("こんにちは、世界!");
IEnumerable<Encoding> utf8Encodings = EncodingChecker.GetAvailableEncodings(utf8Bytes);
Console.WriteLine("UTF-8 Bytes:");
foreach (var encoding in utf8Encodings)
{
Console.WriteLine($"- {encoding.WebName}");
}
byte[] sjisBytes = Encoding.GetEncoding("Shift_JIS").GetBytes("こんにちは、世界!");
IEnumerable<Encoding> sjisEncodings = EncodingChecker.GetAvailableEncodings(sjisBytes);
Console.WriteLine("Shift_JIS Bytes:");
foreach (var encoding in sjisEncodings)
{
Console.WriteLine($"- {encoding.WebName}");
}
ファイルのエンコーディングを判別するためのユーティリティクラスです。
Definition EncodingChecker.cs:18
static IEnumerable< Encoding > GetAvailableEncodings(Stream stream)
指定されたストリームから読み取り可能なエンコーディングのリストを取得します。
Definition EncodingChecker.cs:45

◆ GetAvailableEncodings() [2/2]

IEnumerable< Encoding > YukkuriMovieMaker.Commons.EncodingChecker.GetAvailableEncodings ( Stream stream)
static

指定されたストリームから読み取り可能なエンコーディングのリストを取得します。

引数
streamエンコーディングを判別するストリーム。
戻り値
利用可能なエンコーディングのリスト。判別できなかった場合は空のリストを返します。

ストリームの現在位置は、エンコーディング判別処理の前後で保存・復元されます。 これにより、ストリームの読み取り位置が変更されることなく、後続の処理に影響を与えません。

// ファイルからエンコーディングを判別する例
string filePath = "test.txt";
File.WriteAllText(filePath, "これはテストです。", Encoding.UTF8);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
IEnumerable<Encoding> encodings = EncodingChecker.GetAvailableEncodings(fs);
foreach (var encoding in encodings)
{
Console.WriteLine($"Detected Encoding: {encoding.WebName}");
}
}
File.Delete(filePath);

このクラス詳解は次のファイルから抽出されました: