Fix PCKFile{Reader/Writer} to use LE Unicode when reading vita/ps4 pck

This commit is contained in:
miku-666
2022-07-30 18:29:56 +02:00
parent 5be1a16eef
commit 8242457aca
2 changed files with 11 additions and 6 deletions

View File

@@ -10,8 +10,10 @@ namespace PckStudio.Classes.IO
{
internal class PCKFileReader : StreamDataReader
{
internal PCKFile _file;
internal List<string> LUT;
private PCKFile _file;
private List<string> LUT;
bool _isLittleEndian;
public static PCKFile Read(Stream stream, bool isLittleEndian)
{
@@ -20,6 +22,7 @@ namespace PckStudio.Classes.IO
private PCKFileReader(bool isLittleEndian) : base(isLittleEndian)
{
_isLittleEndian = isLittleEndian;
}
private PCKFile ReadFileFromStream(Stream stream)
@@ -73,7 +76,7 @@ namespace PckStudio.Classes.IO
internal string ReadString(Stream stream)
{
int len = ReadInt(stream);
string s = ReadString(stream, len, Encoding.BigEndianUnicode);
string s = ReadString(stream, len, _isLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode);
ReadInt(stream); // padding
return s;
}

View File

@@ -11,8 +11,9 @@ namespace PckStudio.Classes.IO
{
internal class PCKFileWriter : StreamDataWriter
{
internal PCKFile _pckfile;
internal List<string> LUT = new List<string>();
private PCKFile _pckfile;
private List<string> LUT = new List<string>();
private bool _isLittleEndian;
public static void Write(Stream stream, PCKFile file, bool isLittleEndian)
{
@@ -21,6 +22,7 @@ namespace PckStudio.Classes.IO
private PCKFileWriter(PCKFile file, bool isLittleEndian) : base(isLittleEndian)
{
_isLittleEndian = isLittleEndian;
_pckfile = file;
LUT = _pckfile.GatherMetaTags();
}
@@ -36,7 +38,7 @@ namespace PckStudio.Classes.IO
internal void WriteString(Stream stream, string s)
{
WriteInt(stream, s.Length);
WriteString(stream, s, Encoding.BigEndianUnicode);
WriteString(stream, s, _isLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode);
WriteInt(stream, 0); // padding
}