1
0
This commit is contained in:
Tiger Wang
2014-09-27 22:13:37 +01:00
parent 7b7225e50b
commit 1f8ee70d55
5 changed files with 27 additions and 32 deletions

View File

@@ -441,10 +441,10 @@ static bool isLegalUTF8(const unsigned char * source, int length)
AString & UTF8ToRawBEUTF16(const char * a_UTF8, size_t a_UTF8Length, AString & a_UTF16)
AString UTF8ToRawBEUTF16(const char * a_UTF8, size_t a_UTF8Length)
{
a_UTF16.clear();
a_UTF16.reserve(a_UTF8Length * 3);
AString UTF16;
UTF16.reserve(a_UTF8Length * 3);
const unsigned char * source = (const unsigned char*)a_UTF8;
const unsigned char * sourceEnd = source + a_UTF8Length;
@@ -458,12 +458,12 @@ AString & UTF8ToRawBEUTF16(const char * a_UTF8, size_t a_UTF8Length, AString & a
unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
if (source + extraBytesToRead >= sourceEnd)
{
return a_UTF16;
return UTF16;
}
// Do this check whether lenient or strict
if (!isLegalUTF8(source, extraBytesToRead + 1))
{
return a_UTF16;
return UTF16;
}
// The cases all fall through. See "Note A" below.
@@ -487,13 +487,13 @@ AString & UTF8ToRawBEUTF16(const char * a_UTF8, size_t a_UTF8Length, AString & a
ch = ' ';
}
unsigned short v = htons((unsigned short)ch);
a_UTF16.append((const char *)&v, 2);
UTF16.append((const char *)&v, 2);
}
else if (ch > UNI_MAX_UTF16)
{
// Invalid value, replace with a space
unsigned short v = htons(' ');
a_UTF16.append((const char *)&v, 2);
UTF16.append((const char *)&v, 2);
}
else
{
@@ -501,11 +501,11 @@ AString & UTF8ToRawBEUTF16(const char * a_UTF8, size_t a_UTF8Length, AString & a
ch -= halfBase;
unsigned short v1 = htons((ch >> halfShift) + UNI_SUR_HIGH_START);
unsigned short v2 = htons((ch & halfMask) + UNI_SUR_LOW_START);
a_UTF16.append((const char *)&v1, 2);
a_UTF16.append((const char *)&v2, 2);
UTF16.append((const char *)&v1, 2);
UTF16.append((const char *)&v2, 2);
}
}
return a_UTF16;
return UTF16;
}
/*