示例#1
0
        public static async Task <Encoding> GetDbcsEncoding(string name)
        {
            try
            {
                return(GetEncoding(name));
            }
            catch
            {
                //not supported by system
            }
            name = name.ToLower();
            var encoding = new DbcsEncoding {
                _webName = name
            };

            if (Cache.ContainsKey(name))
            {
                var tuple = Cache[name];
                encoding._dbcsToUnicode = tuple.Item1;
                encoding._unicodeToDbcs = tuple.Item2;
                return(encoding);
            }

            var dbcsToUnicode = new char[0x10000];
            var unicodeToDbcs = new ushort[0x10000];

            try
            {
                var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
                    new Uri(string.Format("ms-appx:///EncodingMaps/{0}.bin", name)));

                using (var fs = await file.OpenReadAsync())
                    using (Stream stream = fs.AsStreamForRead())
                        using (BinaryReader reader = new BinaryReader(stream))
                        {
                            for (int i = 0; i < 0xffff; i++)
                            {
                                ushort u = reader.ReadUInt16();
                                unicodeToDbcs[i] = u;
                            }
                            for (int i = 0; i < 0xffff; i++)
                            {
                                ushort u = reader.ReadUInt16();
                                dbcsToUnicode[i] = (char)u;
                            }
                        }

                Cache[name]             = new Tuple <char[], ushort[]>(dbcsToUnicode, unicodeToDbcs);
                encoding._dbcsToUnicode = dbcsToUnicode;
                encoding._unicodeToDbcs = unicodeToDbcs;
                return(encoding);
            }
            catch
            {
                return(null);
            }
        }
示例#2
0
 public DbcsDecoder(DbcsEncoding encoding)
 {
     _encoding = encoding;
 }