handle RCT2 language encoding properly

This commit is contained in:
Ted John 2016-07-04 19:03:30 +01:00
parent 2824224710
commit 793e83779f
3 changed files with 17 additions and 7 deletions

View File

@ -322,6 +322,15 @@ static bool rct2_language_is_multibyte_charset(int languageId)
}
}
utf8 *rct2_language_string_to_utf8(const char *src, int languageId)
{
if (rct2_language_is_multibyte_charset(languageId)) {
return convert_multibyte_charset(src, languageId);
} else {
return win1252_to_utf8_alloc(src);
}
}
bool language_get_localised_scenario_strings(const utf8 *scenarioFilename, rct_string_id *outStringIds)
{
outStringIds[0] = _languageCurrent->GetScenarioOverrideStringId(scenarioFilename, 0);

View File

@ -79,6 +79,7 @@ int utf8_length(const utf8 *text);
wchar_t *utf8_to_widechar(const utf8 *src);
utf8 *widechar_to_utf8(const wchar_t *src);
utf8 *rct2_language_string_to_utf8(const char *src, int languageId);
bool language_get_localised_scenario_strings(const utf8 *scenarioFilename, rct_string_id *outStringIds);
rct_string_id language_allocate_object_string(const utf8 * target);
void language_free_object_string(rct_string_id stringId);

View File

@ -56,17 +56,17 @@ void StringTable::Read(IReadObjectContext * context, IStream * stream, uint8 id)
entry.Id = id;
entry.LanguageId = languageId;
char * win1252 = stream->ReadString();
if (StringIsBlank(win1252))
char * stringAsWin1252 = stream->ReadString();
utf8 * stringAsUtf8 = rct2_language_string_to_utf8(stringAsWin1252, languageId);
Memory::Free(stringAsWin1252);
if (StringIsBlank(stringAsUtf8))
{
entry.LanguageId = RCT2_LANGUAGE_ID_BLANK;
}
String::Trim(stringAsUtf8);
entry.Text = win1252_to_utf8_alloc(win1252);
Memory::Free(win1252);
String::Trim(entry.Text);
entry.Text = stringAsUtf8;
_strings.push_back(entry);
}
}