Menu

#1 Not support for unicode in reading and writing swf files

v1.0 (example)
open
nobody
5
2008-03-25
2008-03-25
李波
No

etc:

Orrignal function in BufferedBinaryReader :

public string ReadString(uint numChars)
{
SynchBits();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < numChars; i++)
{
char c = ReadChar();
if (c != '\0')
sb.Append(c);
}
return sb.ToString();
}

should be like this:

public string ReadStringUTF8(uint numChars)
{
SynchBits();
byte[] byteArray = new byte[numChars];
byte[] result = null;

for (int i = 0; i < numChars; i++)
{
byteArray[i] = ReadByte();
}

if (byteArray[numChars - 1] == 0)
{//no encoding
StringBuilder sb = new StringBuilder();
for (int i = 0; i < numChars; i++)
{
char c = (char)byteArray[i];
if (c != '\0')
sb.Append(c);
}
return sb.ToString();
}
else
{//encoding is unicode\ result = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("gbk"), byteArray);
return Encoding.GetEncoding("gbk").GetString(result);
}
}

Discussion

  • Nobody/Anonymous

    mark

     
  • Nobody/Anonymous

    public override string ReadString()
    {
    SynchBits();
    int length = 0;
    long dataPostion = BaseStream.Position;
    while (ReadByte() != 0)
    {
    length++;
    }
    BaseStream.Position = dataPostion;
    byte[] _buffer = new byte[length];
    BaseStream.Read(_buffer, 0, length);
    BaseStream.Position += 1;
    return Encoding.UTF8.GetString(_buffer, 0, length);

    //SynchBits();
    //StringBuilder sb = new StringBuilder();

    //char c = 'a';
    //while ((c = ReadChar()) != 0)
    // sb.Append(c);

    //return sb.ToString();
    }

    /// <summary>
    /// Reads the string.
    /// </summary>
    /// <param name="numChars">Num chars to read.</param>
    /// <returns></returns>
    public string ReadString(uint numChars)
    {
    SynchBits();
    byte[] _buffer = new byte[numChars-1];
    BaseStream.Read(_buffer, 0, (int)numChars-1);
    BaseStream.Position += 1;
    return Encoding.UTF8.GetString(_buffer, 0, (int)numChars-1);

    //SynchBits();

    //StringBuilder sb = new StringBuilder();

    //for (int i = 0; i < numChars; i++)
    //{
    // char c = ReadChar();
    // if (c != '\0')
    // sb.Append(c);
    //}
    //return sb.ToString();
    }

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.