Bug #2146675 cannot open UTF-16 little endian coded file
This commit is contained in:
parent
e5a9716efb
commit
df3abf1db7
|
@ -3054,6 +3054,7 @@ bool MyFrame::openFile ( wxString& fileName, bool largeFile )
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert buffer if not UTF-8
|
// convert buffer if not UTF-8
|
||||||
|
int nBOM = 0;
|
||||||
if ( isUtf8 )
|
if ( isUtf8 )
|
||||||
{
|
{
|
||||||
finalBuffer = docBuffer;
|
finalBuffer = docBuffer;
|
||||||
|
@ -3069,37 +3070,32 @@ bool MyFrame::openFile ( wxString& fileName, bool largeFile )
|
||||||
( unsigned char ) docBuffer[2] == 0xFE &&
|
( unsigned char ) docBuffer[2] == 0xFE &&
|
||||||
( unsigned char ) docBuffer[3] == 0xFF )
|
( unsigned char ) docBuffer[3] == 0xFF )
|
||||||
{
|
{
|
||||||
docBuffer += 4;
|
nBOM = 4;
|
||||||
docBufferLen -= 4;
|
|
||||||
}
|
}
|
||||||
if ( docBuffer && // UTF-32 LE
|
else if ( docBuffer && // UTF-32 LE
|
||||||
( unsigned char ) docBuffer[0] == 0xFF &&
|
( unsigned char ) docBuffer[0] == 0xFF &&
|
||||||
( unsigned char ) docBuffer[1] == 0xFE &&
|
( unsigned char ) docBuffer[1] == 0xFE &&
|
||||||
( unsigned char ) docBuffer[2] == 0x00 &&
|
( unsigned char ) docBuffer[2] == 0x00 &&
|
||||||
( unsigned char ) docBuffer[3] == 0x00 )
|
( unsigned char ) docBuffer[3] == 0x00 )
|
||||||
{
|
{
|
||||||
docBuffer += 4;
|
nBOM = 4;
|
||||||
docBufferLen -= 4;
|
|
||||||
}
|
}
|
||||||
|
else if ( docBuffer && //UTF-16 BE
|
||||||
if ( docBuffer && //UTF-16 BE
|
|
||||||
( unsigned char ) docBuffer[0] == 0xFE &&
|
( unsigned char ) docBuffer[0] == 0xFE &&
|
||||||
( unsigned char ) docBuffer[1] == 0xFF )
|
( unsigned char ) docBuffer[1] == 0xFF )
|
||||||
{
|
{
|
||||||
docBuffer += 2;
|
nBOM = 2;
|
||||||
docBufferLen -= 2;
|
|
||||||
}
|
}
|
||||||
if ( docBuffer && //UTF-16 LE
|
else if ( docBuffer && //UTF-16 LE
|
||||||
( unsigned char ) docBuffer[0] == 0xFF &&
|
( unsigned char ) docBuffer[0] == 0xFF &&
|
||||||
( unsigned char ) docBuffer[1] == 0xFE )
|
( unsigned char ) docBuffer[1] == 0xFE )
|
||||||
{
|
{
|
||||||
docBuffer += 2;
|
nBOM = 2;
|
||||||
docBufferLen -= 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !encoding.size() ) // Expat couldn't parse file (e.g. UTF-32)
|
if ( !encoding.size() ) // Expat couldn't parse file (e.g. UTF-32)
|
||||||
{
|
{
|
||||||
encoding = getApproximateEncoding ( docBuffer, docBufferLen );
|
encoding = getApproximateEncoding ( docBuffer + nBOM, docBufferLen - nBOM );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wideEncoding = wxString (
|
wxString wideEncoding = wxString (
|
||||||
|
@ -3134,7 +3130,7 @@ bool MyFrame::openFile ( wxString& fileName, bool largeFile )
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t iconvBufferLeft, docBufferLeft;
|
size_t iconvBufferLeft, docBufferLeft;
|
||||||
iconvBufferLen = iconvBufferLeft = docBufferLen * iconvLenMultiplier + 1;
|
iconvBufferLen = iconvBufferLeft = (docBufferLen - nBOM) * iconvLenMultiplier + 1;
|
||||||
docBufferLeft = docBufferLen;
|
docBufferLeft = docBufferLen;
|
||||||
iconvBuffer = new char[iconvBufferLen];
|
iconvBuffer = new char[iconvBufferLen];
|
||||||
finalBuffer = iconvBuffer; // iconvBuffer will be incremented by iconv
|
finalBuffer = iconvBuffer; // iconvBuffer will be incremented by iconv
|
||||||
|
|
Loading…
Reference in New Issue