老师,不明白为什么还打印乱码?
来源:9-10 宽字符串与窄字符串的转换
张婧仪
2020-12-31



我都按老师视频的要求设置了,编译器用的MSVC,还是乱码。
代码:
#include <io_utils.h>
#include <string.h>
#include <stdlib.h>
#include <wchar.h>
#include <wctype.h>
#include <locale.h>
int main() {
// support for wide string
{
PRINT_BOOL(iswalpha(L'A'));
PRINT_BOOL(iswdigit(L'2'));
wchar_t *wcs = L"你好 Hello";
size_t length = wcslen(wcs);
PRINT_INT(length);
wchar_t src[] = L"HelloWorld";
wchar_t *dest = malloc(sizeof(wchar_t) * 11);
wmemset(dest, 0, 11);
wmemcpy(dest, src, 11);
_putws(dest);
wmemcpy(dest + 3, dest + 1, 4);
_putws(dest);
free(dest);
}
// conversions
char *new_locale = setlocale(LC_ALL, "zh_CN.utf8");
if (new_locale) {
puts(new_locale);
}
{
char mbs[] = "你好";
wchar_t wcs[10];
mbstowcs(wcs, mbs, 10);
wprintf(L"%s\n", wcs);
}
return 0;
}写回答
3回答
-
bennyhuo
2021-01-03
你看下,这是微软的官方文档,设置 utf-8 可以试试 :`setlocale(LC_ALL, ".utf8")`
可能是 Windows Home 版本是不是没有 locale 命令,我的专业版里面命令行运行时可以找到这些 locale 的:

实际上,Linux 和 Mac 上也有 locale 命令,这个方法查看系统支持的 locale 都有哪些,有的话就可以通过 setlocale 函数去设置了。
00 -
bennyhuo
2020-12-31
是不是没有装中文语言。。。如果设置 locale 成功的话, puts(new_locale) 会有输出,你这个里面没有。
022020-12-31 -
bennyhuo
2020-12-31
你的系统没有中文locale? 命令行 locale -a看看输出啥
062021-01-01
相似问题
