- Loader::U8String latin1String;
- Encoding encoding = UNKNOWN;
-
- if (encodingHint == ONE_BYTE) {
- encoding = ONE_BYTE;
- } else if (encodingHint == TWO_BYTE) {
- encoding = TWO_BYTE;
- } else if (encodingHint == ONE_BYTE_LATIN1) {
- Loader::tryConvertUTF8ToLatin1(
- latin1String, encoding, (uint8_t*)buffer, bufferSize, encodingHint);
- } else {
- CHECK(encodingHint == UNKNOWN);
- Loader::tryConvertUTF8ToLatin1(
- latin1String, encoding, (uint8_t*)buffer, bufferSize, encodingHint);
- }
-
- if (encoding == TWO_BYTE) {
- // Treat non-latin1 as UTF-8 and encode it as UTF-16 Little Endian.
- if (encodingHint == UNKNOWN) {
- LWNODE_LOG_INFO("%s contains characters outside of the Latin1 range.",
- filename.c_str());
- }
-
- char* newStringBuffer = nullptr;
- size_t newStringBufferSize = 0;
-
- bool isConverted = convertUTF8ToUTF16le(&newStringBuffer,
- &newStringBufferSize,
- (const char*)bufferHolder.get(),
- bufferSize);
- if (isConverted == false) {
- return FileData();
- }
-
- bufferHolder.reset(newStringBuffer);
- bufferSize = newStringBufferSize;
- } else {
- if (encoding == ONE_BYTE_LATIN1) {
- if (encodingHint == UNKNOWN) {
- LWNODE_LOG_INFO("%s contains Latin1 characters.", filename.c_str());
- }
-
- bufferSize = latin1String.length();
- bufferHolder.reset(allocateStringBuffer(bufferSize + 1));
- ((uint8_t*)bufferHolder.get())[bufferSize] = '\0';
-
- memcpy(bufferHolder.get(), latin1String.data(), bufferSize);
- }
- }
-
- return FileData(bufferHolder.release(), bufferSize, encoding);