老师,不明白为什么还打印乱码?
来源: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
相似问题