aboutsummaryrefslogtreecommitdiff
path: root/Emby.Common.Implementations/TextEncoding
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Common.Implementations/TextEncoding')
-rw-r--r--Emby.Common.Implementations/TextEncoding/TextEncoding.cs48
1 files changed, 48 insertions, 0 deletions
diff --git a/Emby.Common.Implementations/TextEncoding/TextEncoding.cs b/Emby.Common.Implementations/TextEncoding/TextEncoding.cs
new file mode 100644
index 000000000..35b869e43
--- /dev/null
+++ b/Emby.Common.Implementations/TextEncoding/TextEncoding.cs
@@ -0,0 +1,48 @@
+using System.Text;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.TextEncoding;
+
+namespace Emby.Common.Implementations.TextEncoding
+{
+ public class TextEncoding : IEncoding
+ {
+ private readonly IFileSystem _fileSystem;
+
+ public TextEncoding(IFileSystem fileSystem)
+ {
+ _fileSystem = fileSystem;
+ }
+
+ public byte[] GetASCIIBytes(string text)
+ {
+ return Encoding.ASCII.GetBytes(text);
+ }
+
+ public string GetASCIIString(byte[] bytes, int startIndex, int length)
+ {
+ 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;
+
+ return null;
+ }
+ }
+}