mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-26 23:34:44 +02:00
[BUG_FIXED] (Author: Jens Lorenz) Fix a detection error of UTF16 file from a binary file.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1046 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
434638c611
commit
b0f47da58b
@ -182,6 +182,7 @@ size_t Utf8_16_Read::convert(char* buf, size_t len)
|
|||||||
|
|
||||||
void Utf8_16_Read::determineEncoding()
|
void Utf8_16_Read::determineEncoding()
|
||||||
{
|
{
|
||||||
|
INT uniTest = IS_TEXT_UNICODE_STATISTICS;
|
||||||
m_eEncoding = uni8Bit;
|
m_eEncoding = uni8Bit;
|
||||||
m_nSkip = 0;
|
m_nSkip = 0;
|
||||||
|
|
||||||
@ -205,7 +206,7 @@ void Utf8_16_Read::determineEncoding()
|
|||||||
m_nSkip = 3;
|
m_nSkip = 3;
|
||||||
}
|
}
|
||||||
// try to detect UTF-16 little-endian without BOM
|
// try to detect UTF-16 little-endian without BOM
|
||||||
else if (m_nLen > 1 && m_pBuf[0] != NULL && m_pBuf[1] == NULL && IsTextUnicode(m_pBuf, m_nLen, NULL))
|
else if (m_nLen > 1 && m_pBuf[0] != NULL && m_pBuf[1] == NULL && IsTextUnicode(m_pBuf, m_nLen, &uniTest))
|
||||||
{
|
{
|
||||||
m_eEncoding = uni16LE_NoBOM;
|
m_eEncoding = uni16LE_NoBOM;
|
||||||
m_nSkip = 0;
|
m_nSkip = 0;
|
||||||
@ -380,25 +381,30 @@ size_t Utf8_16_Write::convert(char* p, size_t _size)
|
|||||||
case uni16BE_NoBOM:
|
case uni16BE_NoBOM:
|
||||||
case uni16LE_NoBOM:
|
case uni16LE_NoBOM:
|
||||||
case uni16BE:
|
case uni16BE:
|
||||||
case uni16LE: {
|
case uni16LE:
|
||||||
m_pNewBuf = (ubyte*)new ubyte[sizeof(utf16) * (_size + 1)];
|
{
|
||||||
|
utf16* pCur = NULL;
|
||||||
|
|
||||||
if (m_eEncoding == uni16BE || m_eEncoding == uni16LE) {
|
if (m_eEncoding == uni16BE || m_eEncoding == uni16LE) {
|
||||||
// Write the BOM
|
// Write the BOM
|
||||||
|
m_pNewBuf = (ubyte*)new ubyte[sizeof(utf16) * (_size + 1)];
|
||||||
memcpy(m_pNewBuf, k_Boms[m_eEncoding], 2);
|
memcpy(m_pNewBuf, k_Boms[m_eEncoding], 2);
|
||||||
|
pCur = (utf16*)&m_pNewBuf[2];
|
||||||
|
} else {
|
||||||
|
m_pNewBuf = (ubyte*)new ubyte[sizeof(utf16) * _size];
|
||||||
|
pCur = (utf16*)m_pNewBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
Utf8_Iter iter8;
|
Utf8_Iter iter8;
|
||||||
iter8.set(reinterpret_cast<const ubyte*>(p), _size, m_eEncoding);
|
iter8.set(reinterpret_cast<const ubyte*>(p), _size, m_eEncoding);
|
||||||
|
|
||||||
utf16* pCur = (utf16*)&m_pNewBuf[2];
|
|
||||||
|
|
||||||
for (; iter8; ++iter8) {
|
for (; iter8; ++iter8) {
|
||||||
if (iter8.canGet()) {
|
if (iter8.canGet()) {
|
||||||
*pCur++ = iter8.get();
|
*pCur++ = iter8.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_nBufSize = (const char*)pCur - (const char*)m_pNewBuf;
|
m_nBufSize = (const char*)pCur - (const char*)m_pNewBuf;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user