1
0
mirror of synced 2024-11-24 23:50:21 +01:00
OpenTaiko/FDK19/コード/00.共通/CJudgeTextEncoding.cs
2021-09-21 00:16:38 +02:00

81 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace TJAPlayer3
{
public class CJudgeTextEncoding
{
/// <summary>
/// Hnc8様のReadJEncを使用して文字コードの判別をする。
/// </summary>
public static Encoding JudgeFileEncoding(string path)
{
if (!File.Exists(path)) return null;
Encoding enc;
FileInfo file = new FileInfo(path);
using (Hnx8.ReadJEnc.FileReader reader = new Hnx8.ReadJEnc.FileReader(file))
{
// 判別読み出し実行。判別結果はReadメソッドの戻り値で把握できます
Hnx8.ReadJEnc.CharCode c = reader.Read(file);
// 戻り値のNameプロパティから文字コード名を取得できます
string name = c.Name;
Console.WriteLine("【" + name + "】" + file.Name);
// GetEncoding()を呼び出すと、エンコーディングを取得できます
enc = c.GetEncoding();
}
Debug.Print(path + " Encoding=" + enc.CodePage);
if (enc == null)
{
enc = Encoding.GetEncoding(932);
}
return enc;
}
/// <summary>
/// Hnc8様のReadJEncを使用してテキストファイルを読み込む。
/// 改行文字は、勝手に\nに統一する
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string ReadTextFile(string path)
{
if (!File.Exists(path)) return null;
string str = null;
FileInfo file = new FileInfo(path);
using (Hnx8.ReadJEnc.FileReader reader = new Hnx8.ReadJEnc.FileReader(file))
{
reader.Read(file);
str = reader.Text;
}
str = str.Replace(JudgeNewLine(str), "\n");
return str;
}
/// <summary>
/// Environment.NewLineはプラットフォーム依存である。
/// だが、ファイルごとに改行コードは違うので、使用すべきではない。
/// なので、勝手に改行文字を判断する。
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string JudgeNewLine(string str)
{
if (str.Contains("\r\n"))
return ("\r\n");
if (str.Contains("\r"))
return ("\r");
return ("\n");
}
}
}