Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在本地土耳其语(1254)计算机中使用希腊语代码页(1253)_C++_Codepages_Character Set - Fatal编程技术网

C++ 在本地土耳其语(1254)计算机中使用希腊语代码页(1253)

C++ 在本地土耳其语(1254)计算机中使用希腊语代码页(1253),c++,codepages,character-set,C++,Codepages,Character Set,在我的服务器应用程序中,我试图用希腊文的UTF-8解析我的响应,但由于我的本地字符集是1254,因此我无法访问每个希腊文字符 我尝试将我的线程设置为本地1253,但没有成功。我想知道是否有一种方法可以将我的1254字符集机器中的UTF-8字符串转换为windows.1253(希腊语),只用于某些客户端响应 顺便说一下,当我将我的区域设置更改为希腊语时,我没有任何问题,但我无法遵循此解决方案,因为我的本地设置应保持为windows 根据评论更新: 这是我在UTF-8中得到的响应 "Valuatio

在我的服务器应用程序中,我试图用希腊文的UTF-8解析我的响应,但由于我的本地字符集是1254,因此我无法访问每个希腊文字符

我尝试将我的线程设置为本地1253,但没有成功。我想知道是否有一种方法可以将我的1254字符集机器中的UTF-8字符串转换为windows.1253(希腊语),只用于某些客户端响应

顺便说一下,当我将我的区域设置更改为希腊语时,我没有任何问题,但我无法遵循此解决方案,因为我的本地设置应保持为windows

根据评论更新:

这是我在UTF-8中得到的响应

"Valuation_Date":"10\/10\/2019 12:00:00 πμ"
我的应用程序就是这样得到它的

"Valuation_Date":"10\/10\/2019 12:00:00 πμ"
此字符串在其Unicode字符串后通过的代码

std::string returnGivenCodePage(const std::wstring &unicodeString)
{
    std::string result;
    int numberOfBytesNeeded = WideCharToMultiByte(1253, WC_NO_BEST_FIT_CHARS,
            unicodeString.c_str(), (int)unicodeString.length(),
            NULL, 0, NULL, NULL);
    int numberOfBytesWritten = WideCharToMultiByte(1253, WC_NO_BEST_FIT_CHARS,
                unicodeString.c_str(), (int)unicodeString.length(),
                &result[0], numberOfBytesNeeded, NULL, NULL);
    return result;
}
最后,这是我将其更改为SystemWindowsAnsi后的版本,它是1253(希腊语言环境),但我的默认本地语言是1254(土耳其语)

2019年10月10日12:00:00ğ
当然,这只是巨大反应的一小部分

实际上,我想要的是将UTF-8字符串转换为Windows1253(希腊语),在再次转换UTF-8字符串后,我当前的默认本地值是1254(土耳其语)


如果您需要更多信息,我很乐意与您分享。

Windows对字符串使用Unicode,因此您只需在读取非一致代码输入或写入非一致代码输出时指定代码页。如果在应用程序中使用Unicode字符串和类型(std::u16string和char16_t),则只需担心输入/输出期间的转换。编译器本身会抱怨如果你混合了单字节和多字节String和C++,UTF8没有特殊的类型,你必须使用<代码> STD::String 或 char ,并确保所有代码都将字符视为UTF8字节。在导出中,您必须将字符串从UTF8转换为另一个代码页,反之亦然/import@PanagiotisKanavos“Windows对字符串使用Unicode”这是一个相当粗体的语句。代码页1253和1254与UTF-8无关。如果外部文件中有UTF-8数据,可能需要使用代码页65001(CP_UTF8),或者将其传递给MultiByteToWideChart/WideCharToMultiBare函数。@n.m.这是自第一个Windows NT版本以来的事实。我们可以争论Windows95系列,但现在几乎每台Windows机器都运行一个版本的WindowsNT系列,因此使用Unicode
<ValuationDate>10/10/2019 12:00:00 ğì</ValuationDate>