老师,不明白为什么还打印乱码?

来源:9-10 宽字符串与窄字符串的转换

张婧仪

2020-12-31

http://img.mukewang.com/szimg/5fed187309f3ef0411350267.jpg

http://img1.sycdn.imooc.com/szimg/5fed189309aaf3e809480504.jpg

http://img1.sycdn.imooc.com/szimg/5fed18b309c9127f11300577.jpg

我都按老师视频的要求设置了,编译器用的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

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-160#utf-8-support


你看下,这是微软的官方文档,设置 utf-8 可以试试 :`setlocale(LC_ALL, ".utf8")`

可能是 Windows Home 版本是不是没有 locale 命令,我的专业版里面命令行运行时可以找到这些 locale 的:

//img.mukewang.com/szimg/5ff108a809d1c75f07060241.jpg

实际上,Linux 和 Mac 上也有 locale 命令,这个方法查看系统支持的 locale 都有哪些,有的话就可以通过 setlocale 函数去设置了。

0
0

bennyhuo

2020-12-31

是不是没有装中文语言。。。如果设置 locale 成功的话, puts(new_locale) 会有输出,你这个里面没有。

0
2
bennyhuo
回复
张婧仪
另一个回复里,让你运行命令,贴一下结果我看看
2020-12-31
共2条回复

bennyhuo

2020-12-31

你的系统没有中文locale? 命令行 locale -a看看输出啥

0
6
张婧仪
回复
bennyhuo
我用的是win10家庭中文版,更新提示最新版本
2021-01-01
共6条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程