protected string DecodeText(byte[] text, TextEncodings encoding) { switch (encoding) { case TextEncodings.Iso55591: return Encoding.GetEncoding(0x6faf).GetString(text).TrimEnd('\0'); case TextEncodings.Utf8: return Encoding.UTF8.GetString(text).TrimEnd('\0'); case TextEncodings.Utf16: if (text.Length == 0) return string.Empty; if (text[0] == 0xFE && text[1] == 0xFF) return Encoding.BigEndianUnicode.GetString(text, 2, text.Length - 2).TrimEnd('\0'); if (text[0] == 0xFF && text[1] == 0xFE) return Encoding.Unicode.GetString(text, 2, text.Length - 2).TrimEnd('\0'); throw new NotSupportedException(); case TextEncodings.Utf16Be: return Encoding.BigEndianUnicode.GetString(text).TrimEnd('\0'); default: throw new NotSupportedException(); } }
/// <summary> /// Get length of Specific string according to Encoding /// </summary> /// <param name="Text">Text to get length</param> /// <param name="TEncoding">TextEncoding to use for Length calculation</param> /// <returns>Length of text</returns> protected static int GetTextLength(string Text, TextEncodings TEncoding, bool AddNullCharacter) { int StringLength; StringLength = Text.Length; if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE || !IsAscii(Text)) { StringLength *= 2; // in UTF-16 each character is 2 bytes StringLength += 2; } if (TEncoding == TextEncodings.UTF8) { StringLength += 3; } if (AddNullCharacter) { if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) { StringLength += 2; } else { StringLength++; } } return(StringLength); }
/// <summary> /// Create new AttachedPicture frame /// </summary> /// <param name="Flags">Flags of frame</param> /// <param name="Description">Description of picture</param> /// <param name="TextEncoding">TextEncoding use for texts</param> /// <param name="MIMEType">MimeType of picture</param> /// <param name="PictureType">Picture type</param> /// <param name="Data">Data Contain picture</param> public AttachedPictureFrame(FrameFlags Flags, string Description, TextEncodings TextEncoding, string MIMEType, PictureTypes PictureType, MemoryStream Data) : base("APIC", Flags, Description, MIMEType, TextEncoding, Data) { _PictureType = PictureType; }
public OwnershipFrame(FrameFlags Flags, Price PricePayed, SDate PurchDate, string Seller, TextEncodings TEncoding) : base("OWNE", Flags) { _Price = PricePayed; _DateOfPurch = PurchDate; this.Seller = Seller; }
public TermOfUseFrame(FrameFlags Flags, string Text, TextEncodings TextEncoding, string Lang) : base("USER", Flags) { this.Text = Text; this.TextEncoding = TextEncoding; Language = new Language(Lang); }
/// <summary> /// New BaseFileFrame /// </summary> /// <param name="FrameID">FrameID</param> /// <param name="Flags">Frame Flags</param> /// <param name="Description">Description</param> /// <param name="MIMEType">MimeType of Data</param> /// <param name="TextEncoding">TextEncoding for texts</param> /// <param name="Data">Data of frame</param> protected BaseFileFrame(string FrameID, FrameFlags Flags, string Description, string MIMEType, TextEncodings TextEncoding, MemoryStream Data) : base(FrameID, Flags) { _TextEncoding = TextEncoding; _MIMEType = MIMEType; _Description = Description; _Data = Data; }
/// <summary> /// Write specific string to specific MemoryStream /// </summary> /// <param name="Data">MemoryStream to write text to</param> /// <param name="Text">Text to write in MemoryStream</param> /// <param name="TEncoding">TextEncoding use for text</param> /// <param name="AddNullCharacter">indicate if need to add null characters</param> protected void WriteText(MemoryStream Data, string Text, TextEncodings TEncoding, bool AddNullCharacter) { byte[] Buf, BufTemp; BufTemp = FileStreamEx.GetEncoding(TEncoding).GetBytes(Text); if (TEncoding == TextEncodings.UTF_16) { Buf = new byte[BufTemp.Length + 2]; Buf[0] = 0xFF; Buf[1] = 0xFE; for (int i = 0; i < BufTemp.Length; i++) { Buf[i + 2] = BufTemp[i]; } } else if (TEncoding == TextEncodings.UTF_16BE) { Buf = new byte[BufTemp.Length + 2]; Buf[0] = 0xFE; Buf[1] = 0xFF; for (int i = 0; i < BufTemp.Length; i++) { Buf[i + 2] = BufTemp[i]; } } else if (TEncoding == TextEncodings.UTF8) { Buf = new byte[BufTemp.Length + 3]; // EF BB BF Buf[0] = 0xEF; Buf[1] = 0xBB; Buf[2] = 0xBF; for (int i = 0; i < BufTemp.Length; i++) { Buf[i + 3] = BufTemp[i]; } } else { Buf = new byte[BufTemp.Length]; Buf = BufTemp; } Data.Write(Buf, 0, Buf.Length); if (AddNullCharacter) { Data.WriteByte(0); if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) { Data.WriteByte(0); } } }
public void DefaultUnicodeEncodingTest() { TextEncodings expected = new TextEncodings(); // TODO: Initialize to an appropriate value TextEncodings actual; ID3v2.DefaultUnicodeEncoding = expected; actual = ID3v2.DefaultUnicodeEncoding; Assert.AreEqual(expected, actual); Assert.Inconclusive("Verify the correctness of this test method."); }
/// <summary> /// Create new Commercial frame /// </summary> /// <param name="Flags">Flags of frame</param> /// <param name="Description">Description for current frame</param> /// <param name="TextEncoding">TextEncoding use for texts</param> /// <param name="Price">Price that payed for song</param> /// <param name="ValidUntil">Validation date</param> /// <param name="ContactURL">Contact URL to seller</param> /// <param name="RecievedAs">RecievedAd type</param> /// <param name="SellerName">SellerName</param> /// <param name="MIMEType">MimeType for seller Logo</param> /// <param name="Logo">Data Contain Seller Logo</param> public CommercialFrame(FrameFlags Flags, string Description, TextEncodings TextEncoding, Price Price, SDate ValidUntil, string ContactURL, RecievedAsEnum RecievedAs, string SellerName, string MIMEType, MemoryStream Logo) : base("COMR", Flags, Description, MIMEType, TextEncoding, Logo) { _ValidUntil = ValidUntil; this.ContactUrl = ContactURL; this.SellerName = SellerName; this.RecievedAs = RecievedAs; _Price = Price; }
/// <summary> /// Set TextEncoding according to Data of current frame /// </summary> private void SetEncoding() { if (StaticMethods.IsAscii(Text)) { TextEncoding = TextEncodings.Ascii; } else { TextEncoding = ID3v2.DefaultUnicodeEncoding; } }
/// <summary> /// Create new TextFrame with specific information /// </summary> /// <param name="Text">Text of TextFrame</param> /// <param name="TextEncoding">TextEncoding of TextFrame</param> /// <param name="FrameID">FrameID of TextFrame</param> /// <param name="Flags">Flags of Frame</param> public TextFrame(string FrameID, FrameFlags Flags, string Text, TextEncodings TextEncoding, int Ver) : base(FrameID, Flags) { if (FramesInfo.IsTextFrame(FrameID, Ver) != 1) { throw (new ArgumentException(FrameID + " is not valid TextFrame FrameID")); } this.Text = Text; this.TextEncoding = TextEncoding; }
/// <summary> /// New Synchronised Text /// </summary> /// <param name="Flags">Frame Flags</param> /// <param name="TextEncoding">TextEncoding use for texts</param> /// <param name="Lang">Language of texts</param> /// <param name="TimeStamp">TimeStamps that use for times</param> /// <param name="ContentType">ContentType</param> /// <param name="ContentDescriptor">Descriptor of Contents</param> public SynchronisedText(FrameFlags Flags, TextEncodings TextEncoding, string Lang, TimeStamps TimeStamp, ContentTypes ContentType, string ContentDescriptor, Stream FS) : base("SYLT", Flags, FS) { _Syllables = new FrameCollection <Syllable>("Syllables"); this.ContentType = ContentType; this.TimeStamp = TimeStamp; this.TextEncoding = TextEncoding; Language = new Language(Lang); this.Text = ContentDescriptor; }
/// <summary> /// Create new UserTextFrame from specific information /// </summary> /// <param name="FrameID">FrameID of frame</param> /// <param name="Flags">Frame flags</param> /// <param name="Text">Frame text</param> /// <param name="Description">Frame description</param> /// <param name="TextEncoding">TextEncoding of texts</param> /// <param name="Ver">Minor version of ID3v2</param> public UserTextFrame(string FrameID, FrameFlags Flags, string Text, string Description, TextEncodings TextEncoding, int Ver) : base(FrameID, Flags) { if (FramesInfo.IsTextFrame(FrameID, Ver) != 2) { throw (new ArgumentException(FrameID + " is not valid for UserTextFrame class")); } this.Text = Text; this.TextEncoding = TextEncoding; this.Description = Description; }
static Encoding GetEncoding(TextEncodings TEncoding) { switch (TEncoding) { case TextEncodings.Utf16: return(Encoding.Unicode); case TextEncodings.Utf16Be: return(Encoding.GetEncoding("UTF-16BE")); default: return(Encoding.UTF8); } }
public TextWithLanguageFrame(string FrameID, FrameFlags Flags, string Text, string Description, TextEncodings TextEncoding, string Lang) : base(FrameID, Flags) { if (FrameID != "USLT" && FrameID != "COMM") { throw (new ArgumentException(FrameID + " is not valid Frame for TextWithLanguageFrame")); } Language = new Language(Lang); this.Text = Text; this.Description = ""; this.TextEncoding = TextEncoding; }
protected string ReadText(BinaryReader reader, TextEncodings encoding) { switch (encoding) { case TextEncodings.Iso55591: { var bytes = new ByteBuffer(); while (true) { var b = reader.ReadByte(); if (b == 0) break; bytes.Add(b); } if (bytes.Length == 0) return string.Empty; return DecodeText(bytes.ToArray(), encoding); } case TextEncodings.Utf16: { var bytes = new ByteBuffer(); while (true) { var b = reader.ReadByte(); if (b == 0) { var n = reader.ReadByte(); if (n == 0) break; bytes.Add(b); bytes.Add(n); break; } bytes.Add(b); } return DecodeText(bytes.ToArray(), encoding); } default: throw new NotSupportedException(); } }
protected byte[] EncodeText(string text, TextEncodings encoding) { switch (encoding) { case TextEncodings.Iso55591: return Encoding.GetEncoding(0x6faf).GetBytes(text + "\0"); case TextEncodings.Utf8: return Encoding.UTF8.GetBytes(text + "\0\0"); default: throw new NotSupportedException(); } }
public static Encoding GetEncoding(TextEncodings TEncoding) { switch (TEncoding) { case TextEncodings.UTF_16: return Encoding.Unicode; case TextEncodings.UTF_16BE: return Encoding.GetEncoding("UTF-16BE"); case TextEncodings.UTF8: return Encoding.UTF8; default: return Encoding.Default; } }
public void WriteText(string Text, TextEncodings TEncoding, bool AddNullCharacter) { byte[] Buf; Buf = StaticMethods.GetEncoding(TEncoding).GetBytes(Text); FS.Write(Buf, 0, Buf.Length); if (AddNullCharacter) { FS.WriteByte(0); if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) { FS.WriteByte(0); } } }
/// <summary> /// Write specific string to specific MemoryStream /// </summary> /// <param name="Data">MemoryStream to write text to</param> /// <param name="Text">Text to write in MemoryStream</param> /// <param name="TEncoding">TextEncoding use for text</param> /// <param name="AddNullCharacter">indicate if need to add null characters</param> protected void WriteText(MemoryStream Data, string Text, TextEncodings TEncoding, bool AddNullCharacter) { byte[] Buf; Buf = FileStreamEx.GetEncoding(TEncoding).GetBytes(Text); Data.Write(Buf, 0, Buf.Length); if (AddNullCharacter) { Data.WriteByte(0); if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) { Data.WriteByte(0); } } }
public static void SaveLrcFile(string path, TextEncodings encoding, string[] lrc) { if (File.Exists(path)) { File.Delete(path); } StreamWriter writer = new StreamWriter(path, false, GetEncoding(encoding)); foreach (string o in lrc) { writer.WriteLine(o); } writer.Flush(); writer.Close(); }
public static Encoding GetEncoding(TextEncodings encording) { switch (encording) { case TextEncodings.GBK: return Encoding.GetEncoding("GBK"); case TextEncodings.UTF_16: return Encoding.GetEncoding("UTF-16"); case TextEncodings.UTF_16BE: return Encoding.GetEncoding("UTF-16BE"); case TextEncodings.UTF_8: return Encoding.UTF8; default: return Encoding.Default; } }
public static Encoding GetEncoding(TextEncodings TEncoding) { switch (TEncoding) { case TextEncodings.UTF_16: return(Encoding.Unicode); case TextEncodings.UTF_16BE: return(Encoding.GetEncoding("UTF-16BE")); case TextEncodings.UTF8: return(Encoding.UTF8); default: return(Encoding.Default); } }
/// <summary> /// Get System.Text.Encoding according to specified TextEncoding argument /// </summary> /// <param name="TEncoding">TextEncoding to indicate</param> /// <returns>System.Text.Encoding</returns> public static Encoding GetEncoding(TextEncodings TEncoding) { switch (TEncoding) { case TextEncodings.UTF_16: return(Encoding.Unicode); case TextEncodings.UTF_16BE: return(Encoding.GetEncoding("UTF-16BE")); case TextEncodings.UTF8: return(Encoding.UTF8); default: Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); return(Encoding.GetEncoding("windows-1252")); } }
public static void SaveLrcFile(string path, TextEncodings encoding, string lrc) { if (File.Exists(path)) { File.Delete(path); } try { StreamWriter writer = new StreamWriter(path, false, GetEncoding(encoding)); writer.WriteLine(lrc); writer.Flush(); writer.Close(); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }
public static Encoding GetEncoding(TextEncodings encording) { switch (encording) { case TextEncodings.GBK: return(Encoding.GetEncoding("GBK")); case TextEncodings.UTF_16: return(Encoding.GetEncoding("UTF-16")); case TextEncodings.UTF_16BE: return(Encoding.GetEncoding("UTF-16BE")); case TextEncodings.UTF_8: return(Encoding.UTF8); default: return(Encoding.Default); } }
/// <summary> /// Get MemoryStream of frame data /// </summary> /// <returns>MemoryStream of current frame</returns> public override MemoryStream FrameStream(int MinorVersion) { MemoryStream ms = FrameHeader(MinorVersion); if (!IsUrl) { //if (ID3v2.AutoTextEncoding) // SetEncoding(); TextEncoding = TextEncodings.UTF_16; //No Anto Encoding !!!!!!!!!!??????????? ms.WriteByte((byte)TextEncoding); // Write Text Encoding WriteText(ms, Text, TextEncoding, false); // Write Text } else { WriteText(ms, Text, TextEncodings.Ascii, false); } return(ms); }
/// <summary> /// Create new TextFrame with specific information /// </summary> /// <param name="Text">Text of TextFrame</param> /// <param name="TextEncoding">TextEncoding of TextFrame</param> /// <param name="FrameID">FrameID of TextFrame</param> /// <param name="Flags">Flags of Frame</param> public TextFrame(string FrameID, FrameFlags Flags, string Text, TextEncodings TextEncoding, int Ver) : base(FrameID, Flags) { if (FramesInfo.IsTextFrame(FrameID, Ver) != 1) throw (new ArgumentException(FrameID + " is not valid TextFrame FrameID")); this.Text = Text; this.TextEncoding = TextEncoding; }
/// <summary> /// Create new UserTextFrame from specific information /// </summary> /// <param name="FrameID">FrameID of frame</param> /// <param name="Flags">Frame flags</param> /// <param name="Text">Frame text</param> /// <param name="Description">Frame description</param> /// <param name="TextEncoding">TextEncoding of texts</param> /// <param name="Ver">Minor version of ID3v2</param> public UserTextFrame(string FrameID, FrameFlags Flags, string Text, string Description, TextEncodings TextEncoding, int Ver) : base(FrameID, Flags) { if (FramesInfo.IsTextFrame(FrameID, Ver) != 2) throw (new ArgumentException(FrameID + " is not valid for UserTextFrame class")); this.Text = Text; this.TextEncoding = TextEncoding; this.Description = Description; }
/// <summary> /// Create new GeneralFile frame /// </summary> /// <param name="Flags">Flags of frame</param> /// <param name="Description">Description of frame</param> /// <param name="MIMEType">MimeType of file</param> /// <param name="TextEncoding">TextEncoding for storing texts</param> /// <param name="FileName">Filename</param> /// <param name="Data">Data contain file</param> public GeneralFileFrame(FrameFlags Flags, string Description, string MIMEType, TextEncodings TextEncoding, string FileName, MemoryStream Data) : base("GEOB", Flags, Description, MIMEType, TextEncoding, Data) { _FileName = FileName; }
/// <summary> /// Write specific string to specific MemoryStream /// </summary> /// <param name="Data">MemoryStream to write text to</param> /// <param name="Text">Text to write in MemoryStream</param> /// <param name="TEncoding">TextEncoding use for text</param> /// <param name="AddNullCharacter">indicate if need to add null characters</param> protected void WriteText(MemoryStream Data, string Text, TextEncodings TEncoding, bool AddNullCharacter) { byte[] Buf,BufTemp; BufTemp = FileStreamEx.GetEncoding(TEncoding).GetBytes(Text); if (TEncoding == TextEncodings.UTF_16) { Buf = new byte[BufTemp.Length + 2]; Buf[0] = 0xFF; Buf[1] = 0xFE; for (int i = 0; i < BufTemp.Length; i++) Buf[i + 2] = BufTemp[i]; } else if (TEncoding == TextEncodings.UTF_16BE) { Buf = new byte[BufTemp.Length + 2]; Buf[0] = 0xFE; Buf[1] = 0xFF; for (int i = 0; i < BufTemp.Length; i++) Buf[i + 2] = BufTemp[i]; } else if (TEncoding == TextEncodings.UTF8) { Buf = new byte[BufTemp.Length + 3]; // EF BB BF Buf[0] = 0xEF; Buf[1] = 0xBB; Buf[2] = 0xBF; for (int i = 0; i < BufTemp.Length; i++) Buf[i + 3] = BufTemp[i]; } else { Buf = new byte[BufTemp.Length]; Buf = BufTemp; } Data.Write(Buf, 0, Buf.Length); if (AddNullCharacter) { Data.WriteByte(0); if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) Data.WriteByte(0); } }
/// <summary> /// New Synchronised Text /// </summary> /// <param name="Flags">Frame Flags</param> /// <param name="TextEncoding">TextEncoding use for texts</param> /// <param name="Lang">Language of texts</param> /// <param name="TimeStamp">TimeStamps that use for times</param> /// <param name="ContentType">ContentType</param> /// <param name="ContentDescriptor">Descriptor of Contents</param> public SynchronisedText(FrameFlags Flags, TextEncodings TextEncoding, string Lang, TimeStamps TimeStamp, ContentTypes ContentType, string ContentDescriptor) : base("SYLT", Flags) { _Syllables = new FramesCollection<Syllable>(); this.ContentType = ContentType; this.TimeStamp = TimeStamp; this.TextEncoding = TextEncoding; Language = new Language(Lang); this.ContentDescriptor = ContentDescriptor; }
public string ReadText(int MaxLength, TextEncodings TEncoding, bool DetectEncoding) { int i = 0; return(ReadText(MaxLength, TEncoding, ref i, DetectEncoding)); }
public string ReadText(int MaxLength, TextEncodings TEncoding, bool DetectEncoding) { int i = 0; return ReadText(MaxLength, TEncoding, ref i, DetectEncoding); }
static Encoding GetEncoding(TextEncodings TEncoding) { switch (TEncoding) { case TextEncodings.Utf16: return Encoding.Unicode; case TextEncodings.Utf16Be: return Encoding.GetEncoding("UTF-16BE"); default: return Encoding.UTF8; } }
/// <summary> /// Read string from current FileStream /// </summary> /// <param name="MaxLength">Maximum length that can read from stream</param> /// <param name="TEncoding">TextEcoding to read from Stream</param> /// <param name="DetectEncoding">Can method recognize encoding of text from Encoding inicators</param> /// <returns>string readed from current FileStream</returns> public string ReadText(int MaxLength, TextEncodings TEncoding, ref int ReadedLength, bool DetectEncoding) { if (MaxLength <= 0) return ""; long Pos = base.Position; MemoryStream MStream = new MemoryStream(); if (DetectEncoding && MaxLength >= 3) { byte[] Buffer = new byte[3]; base.Read(Buffer, 0, Buffer.Length); if (Buffer[0] == 0xFF && Buffer[1] == 0xFE) { // FF FE TEncoding = TextEncodings.UTF_16;// UTF-16 (LE) base.Position--; MaxLength -= 2; } else if (Buffer[0] == 0xFE && Buffer[1] == 0xFF) { // FE FF TEncoding = TextEncodings.UTF_16BE; base.Position--; MaxLength -= 2; } else if (Buffer[0] == 0xEF && Buffer[1] == 0xBB && Buffer[2] == 0xBF) { // EF BB BF TEncoding = TextEncodings.UTF8; MaxLength -= 3; } else base.Position -= 3; } bool Is2ByteSeprator = (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE); byte Buf; while (MaxLength > 0) { Buf = ReadByte(); // Read First/Next byte from stream if (Buf != 0) // if it's data byte MStream.WriteByte(Buf); else // if Buf == 0 { if (Is2ByteSeprator) { byte Temp = ReadByte(); if (Temp == 0) break; else { MStream.WriteByte(Buf); MStream.WriteByte(Temp); MaxLength--; } } else break; } MaxLength--; } if (MaxLength < 0) base.Position += MaxLength; ReadedLength -= Convert.ToInt32(base.Position - Pos); return GetEncoding(TEncoding).GetString(MStream.ToArray()); }
public string ReadText(int MaxLength, TextEncodings TEncoding) { int i = 0; return(ReadText(MaxLength, TEncoding, ref i, true)); }
public TextWithLanguageFrame(string FrameID, FrameFlags Flags, string Text, string Description, TextEncodings TextEncoding, string Lang) : base(FrameID, Flags) { if (FrameID != "USLT" && FrameID != "COMM") throw (new ArgumentException(FrameID + " is not valid Frame for TextWithLanguageFrame")); Language = new Language(Lang); this.Text = Text; this.Description = ""; this.TextEncoding = TextEncoding; }
string ReadText(int MaxLength, TextEncodings TEncoding) { var i = 0; return(ReadText(MaxLength, TEncoding, ref i, false)); }
/// <summary> /// Read string from current FileStream /// </summary> /// <param name="MaxLength">Maximum length that can read from stream</param> /// <param name="TEncoding">TextEcoding to read from Stream</param> /// <param name="DetectEncoding">Can method recognize encoding of text from Encoding inicators</param> /// <returns>string readed from current FileStream</returns> public string ReadText(int MaxLength, TextEncodings TEncoding, ref int ReadedLength, bool DetectEncoding) { if (MaxLength <= 0) { return(""); } long Pos = base.Position; MemoryStream MStream = new MemoryStream(); if (DetectEncoding && MaxLength >= 3) { byte[] Buffer = new byte[3]; base.Read(Buffer, 0, Buffer.Length); if (Buffer[0] == 0xFF && Buffer[1] == 0xFE) { // FF FE TEncoding = TextEncodings.UTF_16; // UTF-16 (LE) base.Position--; MaxLength -= 2; } else if (Buffer[0] == 0xFE && Buffer[1] == 0xFF) { // FE FF TEncoding = TextEncodings.UTF_16BE; base.Position--; MaxLength -= 2; } else if (Buffer[0] == 0xEF && Buffer[1] == 0xBB && Buffer[2] == 0xBF) { // EF BB BF TEncoding = TextEncodings.UTF8; MaxLength -= 3; } else { base.Position -= 3; } } bool Is2ByteSeprator = (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE); byte Buf; while (MaxLength > 0) { Buf = ReadByte(); // Read First/Next byte from stream if (Buf != 0) // if it's data byte { MStream.WriteByte(Buf); } else // if Buf == 0 { if (Is2ByteSeprator) { MStream.WriteByte(Buf); /*byte Temp = ReadByte(); * if (Temp == 0) * { * if (MStream.Length % 2 == 1) * MStream.WriteByte(Temp); * break; * } * else * { * MStream.WriteByte(Buf); * MStream.WriteByte(Temp); * MaxLength--; * }*/ } else { break; } } MaxLength--; } if (MaxLength < 0) { base.Position += MaxLength; } ReadedLength -= Convert.ToInt32(base.Position - Pos); return(GetEncoding(TEncoding).GetString(MStream.ToArray())); }
public string ReadText(int MaxLength, TextEncodings TEncoding, ref int ReadedLength, bool DetectEncoding) { if (MaxLength <= 0) { return(""); } long Pos = this.FS.Position; // store current position MemoryBlockStream MStream = new MemoryBlockStream(); if (DetectEncoding && MaxLength >= 3) { byte[] Buffer = new byte[3]; FS.Read(Buffer, 0, Buffer.Length); if (Buffer[0] == 0xFF && Buffer[1] == 0xFE) { // FF FE TEncoding = TextEncodings.UTF_16; // UTF-16 (LE) this.FS.Position--; MaxLength -= 2; } else if (Buffer[0] == 0xFE && Buffer[1] == 0xFF) { // FE FF TEncoding = TextEncodings.UTF_16BE; this.FS.Position--; MaxLength -= 2; } else if (Buffer[0] == 0xEF && Buffer[1] == 0xBB && Buffer[2] == 0xBF) { // EF BB BF TEncoding = TextEncodings.UTF8; MaxLength -= 3; } else { this.FS.Position -= 3; } } // Indicate text seprator type for current string encoding bool Is2ByteSeprator = (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE); byte Buf, Buf2; while (MaxLength > 0) { if (Is2ByteSeprator) { Buf = ReadByte(FS); Buf2 = ReadByte(FS); if (Buf == 0 && Buf2 == 0) { break; } else { MStream.WriteByte(Buf); MStream.WriteByte(Buf2); } MaxLength--; } else { Buf = ReadByte(FS); // Read First/Next byte from stream if (Buf == 0) { break; } else { MStream.WriteByte(Buf); } } MaxLength--; } if (MaxLength < 0) { this.FS.Position += MaxLength; } ReadedLength -= Convert.ToInt32(this.FS.Position - Pos); return(StaticMethods.GetEncoding(TEncoding).GetString(MStream.ToArray())); }
string ReadText(int MaxLength, TextEncodings TEncoding, ref int ReadedLength, bool DetectEncoding) { if (MaxLength <= 0) { return(""); } var bytesRead = 0; using (var mStream = new MemoryStream()) { if (DetectEncoding && MaxLength >= 3) { var buffer = new byte[3]; Read(buffer, 0, buffer.Length); if (buffer[0] == 0xFF && buffer[1] == 0xFE) { // FF FE TEncoding = TextEncodings.Utf16; // UTF-16 (LE) _ptr -= 1; bytesRead += 1; MaxLength -= 2; } else if (buffer[0] == 0xFE && buffer[1] == 0xFF) { // FE FF TEncoding = TextEncodings.Utf16Be; _ptr -= 1; bytesRead += 1; MaxLength -= 2; } else if (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF) { // EF BB BF TEncoding = TextEncodings.Utf8; MaxLength -= 3; } { _ptr -= 3; bytesRead += 3; } } var is2ByteSeprator = TEncoding == TextEncodings.Utf16 || TEncoding == TextEncodings.Utf16Be; while (MaxLength > 0) { var buf = ReadByte(); if (buf != 0) // if it's data byte { mStream.WriteByte(buf); } else // if Buf == 0 { if (is2ByteSeprator) { var temp = ReadByte(); if (temp == 0) { break; } mStream.WriteByte(buf); mStream.WriteByte(temp); MaxLength--; } else { break; } } MaxLength--; } if (MaxLength < 0) { _ptr += MaxLength; } ReadedLength -= bytesRead; return(GetEncoding(TEncoding).GetString(mStream.ToArray(), 0, (int)mStream.Length)); } }
/// <summary> /// Create new Commercial frame /// </summary> /// <param name="Flags">Flags of frame</param> /// <param name="Description">Description for current frame</param> /// <param name="TextEncoding">TextEncoding use for texts</param> /// <param name="Price">Price that payed for song</param> /// <param name="ValidUntil">Validation date</param> /// <param name="ContactURL">Contact URL to seller</param> /// <param name="RecievedAs">RecievedAd type</param> /// <param name="SellerName">SellerName</param> /// <param name="MIMEType">MimeType for seller Logo</param> /// <param name="Logo">Data Contain Seller Logo</param> public CommercialFrame(FrameFlags Flags, string Description, TextEncodings TextEncoding, Price Price , SDate ValidUntil, string ContactURL, RecievedAsEnum RecievedAs, string SellerName, string MIMEType, MemoryStream Logo) : base("COMR", Flags, Description, MIMEType, TextEncoding, Logo) { _ValidUntil = ValidUntil; this.ContactUrl = ContactURL; this.SellerName = SellerName; this.RecievedAs = RecievedAs; _Price = Price; }
public string ReadText(int MaxLength, TextEncodings TEncoding) { int i = 0; return ReadText(MaxLength, TEncoding, ref i, true); }
/// <summary> /// Get length of Specific string according to Encoding /// </summary> /// <param name="Text">Text to get length</param> /// <param name="TEncoding">TextEncoding to use for Length calculation</param> /// <returns>Length of text</returns> protected static int GetTextLength(string Text, TextEncodings TEncoding, bool AddNullCharacter) { int StringLength; StringLength = Text.Length; if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) StringLength *= 2; // in UTF-16 each character is 2 bytes if (AddNullCharacter) { if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) StringLength += 2; else StringLength++; } return StringLength; }
/// <summary> /// Write specific string to specific MemoryStream /// </summary> /// <param name="Data">MemoryStream to write text to</param> /// <param name="Text">Text to write in MemoryStream</param> /// <param name="TEncoding">TextEncoding use for text</param> /// <param name="AddNullCharacter">indicate if need to add null characters</param> protected void WriteText(MemoryStream Data, string Text, TextEncodings TEncoding, bool AddNullCharacter) { byte[] Buf; Buf = FileStreamEx.GetEncoding(TEncoding).GetBytes(Text); Data.Write(Buf, 0, Buf.Length); if (AddNullCharacter) { Data.WriteByte(0); if (TEncoding == TextEncodings.UTF_16 || TEncoding == TextEncodings.UTF_16BE) Data.WriteByte(0); } }