0
我目前使用的轉換功能,它看起來像這樣(C++ Builder中):變量AnsiStringT模板
UnicodeString OutputInCodePage(const int CodePage, std::string& InStr, const unsigned Offs)
{
switch (CodePage)
{
default:
case 0: return AnsiStringT<0> (InStr.substr(Offs).c_str()); // System default
case 037: return AnsiStringT<037> (InStr.substr(Offs).c_str()); // IBM037 IBM EBCDIC US-Canada
case 437: return AnsiStringT<437> (InStr.substr(Offs).c_str()); // IBM437 OEM United States
case 500: return AnsiStringT<500> (InStr.substr(Offs).c_str()); // IBM500 IBM EBCDIC International
// And many more following...
}
}
但我真的想避免使用龐大的開關/案例 - 是這樣的:
UnicodeString OutputInCodePage(const int CodePage, std::string& InStr, const unsigned Offs)
{
return AnsiStringT<CodePage> (InStr.substr(Offs).c_str());
}
這不起作用,並給我E2396 Template argument must be a constant expression
錯誤。
有沒有辦法重新做代碼,所以我可以使用std::string
基於CodePage參數原始數據轉換(到UnicodeString)沒有一個巨大的開關/案例列表?
謝謝回覆! – Coder12345
請注意,在非Windows平臺上,'UnicodeFromLocaleChars'可能非常慢,因爲需要在這些平臺上提供區域名稱。我開發了一個完美的散列,將其轉換得非常快(散列只是一個%和一個排他或IIRC)。我會看一看。這是約。是System.pas中POSIX版本的10倍,並且在某些代碼中,這確實可以有所作爲。 –