使用wcstombs()根据区域设置将wchar_t*(包含Unicode)转换为MBCS(char*)

使用wcstombs()根据区域设置将wchar_t*(包含Unicode)转换为MBCS(char*),unicode,Unicode,我的输入是Unicode字符,例如:,“(U+00DB)(U+0081)”(wchar\U t*)。我使用wcstombs将这个宽字符字符串转换为char*(MBCS)。由于Unicode已经在UTF-8中编码,我希望它以DB81 char*的形式逐字节返回Unicode的复制序列。但我得到的是c3 9b。这种情况发生在Linux和windows上,我只得到“DB81” 我需要打开一个名为db81的文件(如hextump中所示),但是fopen使用char*filename。因此,我必须将此wc

我的输入是Unicode字符,例如:,“(U+00DB)(U+0081)”(wchar\U t*)。我使用wcstombs将这个宽字符字符串转换为char*(MBCS)。由于Unicode已经在UTF-8中编码,我希望它以DB81 char*的形式逐字节返回Unicode的复制序列。但我得到的是c3 9b。这种情况发生在Linux和windows上,我只得到“DB81”


我需要打开一个名为db81的文件(如hextump中所示),但是fopen使用char*filename。因此,我必须将此wchar_t*转换为MBCS。请帮忙

不,你想做的不是你认为应该做的

fopen(),在任何情况下-无法处理系统上所有可能的文件名,因为它缺少unicode支持


请参阅以了解如何使用wfopen()。

“因为Unicode已经用UTF-8编码”——在本例中并非如此。任何平台上的
wchar\u t*
都不会被编码为UTF-8。根据平台的不同,
wchar\u t
类型为16位或32位,因此编码为UTF-16或UTF-32。转换为MBCS与转换为UTF-8不同,除非您使用的是UTF-8语言环境/代码页。如果要将UTF-16/UTF-32转换为UTF-8,应该使用ICONV、ICU或其他Unicode库来完成。