aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-11-01 00:07:12 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-11-01 00:07:12 -0400
commitb1276dc2084515ed817ba8b2af405a9bc1f57cd6 (patch)
tree9e8f80656065b7143ec389166c8f7e8667c4d758 /MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs
parent13d8110ce29a7d976c3e88dc4b330922964ac11a (diff)
make media encoding project portable
Diffstat (limited to 'MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs')
-rw-r--r--MediaBrowser.Server.Implementations/TextEncoding/TextEncoding.cs33
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;
+ }
}
}