diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs b/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs index c1029dfb5..4c047b7d5 100644 --- a/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs +++ b/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs @@ -1,10 +1,18 @@ using System.Text; +using MediaBrowser.Model.IO; using MediaBrowser.Model.TextEncoding; namespace MediaBrowser.Server.Implementations.TextEncoding { - public class TextEncoding : IEncoding + public class TextEncoding : IEncoding { + private readonly IFileSystem _fileSystem; + + public TextEncoding(IFileSystem fileSystem) + { + _fileSystem = fileSystem; + } + public byte[] GetASCIIBytes(string text) { return Encoding.ASCII.GetBytes(text); @@ -14,5 +22,28 @@ namespace MediaBrowser.Server.Implementations.TextEncoding { return Encoding.ASCII.GetString(bytes, 0, bytes.Length); } + + public Encoding GetFileEncoding(string srcFile) + { + // *** Detect byte order mark if any - otherwise assume default + var buffer = new byte[5]; + + using (var file = _fileSystem.OpenRead(srcFile)) + { + file.Read(buffer, 0, 5); + } + + if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) + return Encoding.UTF8; + if (buffer[0] == 0xfe && buffer[1] == 0xff) + return Encoding.Unicode; + if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff) + return Encoding.UTF32; + if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76) + return Encoding.UTF7; + + // It's ok - anything aside from utf is ok since that's what we're looking for + return Encoding.Default; + } } } |
