private WordLibrary ReadOnePhrase(FileStream fs, int nextStartPosition) { WordLibrary wl = new WordLibrary(); var magic = BinFileHelper.ReadInt32(fs); var hanzi_offset = BinFileHelper.ReadInt16(fs); wl.Rank = fs.ReadByte(); var x6 = fs.ReadByte(); //不知道干啥的 var unknown8 = BinFileHelper.ReadInt64(fs); //新增的,不知道什么意思 var pyBytesLen = hanzi_offset - 18; var pyBytes = BinFileHelper.ReadArray(fs, pyBytesLen); var pyStr = Encoding.Unicode.GetString(pyBytes); var split = BinFileHelper.ReadInt16(fs); //00 00 分割拼音和汉字 var wordBytesLen = nextStartPosition - (int)fs.Position - 2; //结尾还有个00 00 var wordBytes = BinFileHelper.ReadArray(fs, wordBytesLen); BinFileHelper.ReadInt16(fs); //00 00分割 var word = Encoding.Unicode.GetString(wordBytes); wl.Word = word; try { wl.SetPinyinString(pyStr); wl.CodeType = CodeType.Pinyin; } catch { wl.CodeType = CodeType.NoCode; ImportLineErrorNotice?.Invoke(wl.Word + " 的编码缺失"); } return(wl); }
private WordLibrary ReadOnePhrase(FileStream fs, int nextStartPosition) { WordLibrary wl = new WordLibrary(); var magic = BinFileHelper.ReadInt32(fs); var hanzi_offset = BinFileHelper.ReadInt16(fs); wl.Rank = fs.ReadByte(); var x6 = fs.ReadByte(); //不知道干啥的 var unknown8 = BinFileHelper.ReadInt64(fs); //新增的,不知道什么意思 var pyBytesLen = hanzi_offset - 18; var pyBytes = BinFileHelper.ReadArray(fs, pyBytesLen); var wubiStr = Encoding.Unicode.GetString(pyBytes); var split = BinFileHelper.ReadInt16(fs); //00 00 分割拼音和汉字 var wordBytesLen = nextStartPosition - (int)fs.Position - 2; //结尾还有个00 00 var wordBytes = BinFileHelper.ReadArray(fs, wordBytesLen); BinFileHelper.ReadInt16(fs); //00 00分割 var word = Encoding.Unicode.GetString(wordBytes); wl.Word = word; try { wl.SetCode(CodeType.Wubi98, wubiStr); } catch { return(null); } wl.CodeType = CodeType.Wubi98; return(wl); }
public IList <InternalWord> Parse(string ld2File) { using (var fs = new FileStream(ld2File, FileMode.Open, FileAccess.Read)) { Debug.WriteLine("文件:" + ld2File); byte[] bs = BinFileHelper.ReadArray(fs, 4); string v = Encoding.ASCII.GetString(bs); Debug.WriteLine("类型:" + v); fs.Position = 0x18; Debug.WriteLine("版本:" + BinFileHelper.ReadInt16(fs) + "." + BinFileHelper.ReadInt16(fs)); Debug.WriteLine("ID: 0x" + (BinFileHelper.ReadInt64(fs).ToString("x"))); fs.Position = 0x5c; int offsetData = BinFileHelper.ReadInt32(fs) + 0x60; if (fs.Length > offsetData) { Debug.WriteLine("简介地址:0x" + (offsetData).ToString("x")); fs.Position = offsetData; int type = BinFileHelper.ReadInt32(fs); Debug.WriteLine("简介类型:0x" + (type).ToString("x")); fs.Position = offsetData + 4; int offsetWithInfo = BinFileHelper.ReadInt32(fs) + offsetData + 12; if (type == 3) { // without additional information return(ReadDictionary(fs, offsetData)); } else if (fs.Length > offsetWithInfo - 0x1C) { return(ReadDictionary(fs, offsetWithInfo)); } else { Debug.WriteLine("文件不包含字典数据。网上字典?"); } } else { Debug.WriteLine("文件不包含字典数据。网上字典?"); } return(null); } }