c 中 中文乱码_Windows平台C语言程序在控制台显示中文乱码分析及解决

2023-11-17

前言

初学者在Windows平台上进行C/C++语言(中文)程序开发时,有时会遇到编译报错、在控制台运行时显示中文乱码的问题。

本文就此类问题进行描述、展开原因分析,然后给出解决方法。

本次分享内容的目录如下:

基本概念(字符集、字符编码、代码页、GBK、UTF-8)

问题描述(示例源码、编译报错、中文乱码)

原因分析(编码环节简介、原因分析)

解决方法(解决思路、编译报错解决、中文乱码解决)

结束语


1. 基本概念

本文会涉及到如下基本概念:

1.1 Charset(字符集)

Charset(字符集):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有:ASCII字符集、Unicode字符集等。

计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

1.2 Character Encoding(字符编码)

Character Encoding(字符编码)用于为指定集合中某一对象(如电脉冲、比特模式等),以便文本在计算机中存储和通过通信网络的传递。字符编码就是将符号转换为计算机可以接受的数字系统的数。常见的例子:将拉丁字母表编码成ASCII

注:术语字符编码(Character Encoding)、字符映射(Character Map)或者代码页(CodePage),在历史上往往是同义概念,即字符表(repertoire)中的字符如何编码为码元的流(stream of code units)–通常每个字符对应单个码元。

1.3 CodePage(代码页)

CodePage(代码页)是字符编码的别名,也称内码表,是特定语言的字符集的一张表。

  • OEM(IBM PC)代码页:指计算机的BIOS所支持的字符集编码。最具代表性的是"代码页437(IBM PC或MS-DOS )"。
  • Windows(ANSI)代码页:微软针对不同的使用地区与国家,定义了一系列的支持不同语言字符集的代码页。最具代表性的是代码页WINDOWS-1252 (实现了ISO-8859-1)。

注:Windows代码页最初是根据ANSI草案实现的,这个草案最终成为ISO 8859-1。这是Windows代码页被称作ANSI的缘由。

本文涉及到的两个重要代码页介绍如下:

  • 代码页936:该代码页对应的是GBK编码。既是OEM代码页,也是ANSI代码页
  • 代码页65001:该代码页对应的是UTF-8编码

Windows平台上的GUI程序使用ANSI代码页,而在控制台程序使用OEM代码页(以便向后兼容)。

在Windows系统中的命令行窗口可以通过chcp命令来显示当前代码页(如Windows 7 简体中文操作系统上默认的代码页是936):

 C:> chcp 活动代码页: 936

也可以通过在chcp命令后带一个具体整数参数(代码页数值)来临时改变命令行窗口的当前代码页(如临时修改为UTF-8对应的65001):

 C:> chcp 65001 Active code page: 65001

1.4 GBK(汉字内码扩展规范)

GBK(英文全称:Chinese Internal Code Extension Specification,中文全称:汉字内码扩展规范)是对GB2312-80的扩展,也就是代码页936的扩展(之前代码页936GB2312-80一模一样),最早实现于Windows 95简体中文版。

GBK总体编码范围为0x8140~0xFEFE,首字节在 0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c 中 中文乱码_Windows平台C语言程序在控制台显示中文乱码分析及解决 的相关文章

  • QT210烧写UBOOT到SD卡原理以及UBOOT启动

    原文地址 http blog csdn net shushi0123 article details 8018998 世界早已进入cortex a8了 我也得跟进一下所以买了QT210的开发板 长话短说开始搞SD卡烧写UBOOT 从SD启动
  • TCP选项之SO_LINGER

    SO LINGER这个选项在我以前带队改造haproxy的时候引出过一个reset RST 客户端连接的bug SO LINGER作用 设置函数close 关闭TCP连接时的行为 缺省close 的行为是 如果有数据残留在socket发送缓
  • 手动实现 call、apply、bind

    手动实现 call apply bind 改变 this的指向 就是将函数fn放入传入的context中 然后执行context fn 此时的fn中的this就变成了context 在函数执行完毕之后 需删除context中的fn call
  • 腾讯云2核4G服务器性能如何?能安装几个网站?

    腾讯云2核4G服务器能安装多少个网站 2核4g配置能承载多少个网站 一台2核4G服务器可以安装多少个网站 阿腾云2核4G5M带宽服务器目前安装了14个网站 从技术角度是没有限制的 只要云服务器性能够用 想安装几个网站就安装几个网站 但是从公
  • Windows系统下安装Ubuntu子系统

    总共分三步 1 网上是有Windows 10版本的安装教程 链接如下 14条消息 Windows系统中安装ubutu子系统 惜洛 Jankin的博客 CSDN博客 2 补充Windows 11版本的安装 大同小异 3 如果出现报错 14条消
  • linux非阻塞socket教程

    本文并非解释什么是非阻塞socket 也不是介绍socket API的用法 取而代替的是让你感受实际工作中的代码编写 虽然很简陋 但你可以通过man手册与其它资源非富你的代码 请注意本教程所说的主题 如果细说 内容可以达到一本书内容 你会发
  • csgo 直连服务器,csgo你只可以从大厅连接此服务器解决办法

    csgo你只可以从大厅连接此服务器解决办法 请完成以下步骤刷新您的 Steam 设置 您注销并完全退出 Steam 请打开 Internet Explore Safari 或 Firefox 和并在网址列中输入 Steam flushcon
  • 高斯模糊处理

    借鉴 http blog sina com cn s blog 861912cd0101957x html http www ruanyifeng com blog 2012 11 gaussian blur html 二维高斯曲面的公式
  • input js number 整数_JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金) 两位小数...

    第一 限制只能是整数 如果不是整数就直接alert 第二 限制是两位的小数 原理 通过 正则表达式判断 不满足 执行alert 第一个正则表达式是 d 表示可以是一个或者多个数字 第二个正则表达式是 d d 0 2 表示必须是数字开头 数字
  • 别踩雷了!交互设计必须遵守这10大规范!

    UI 设计师需要理解交互设计 因为不懂交互的 UI 设计师不能成为优秀的 UI 设计师 交互设计涉及用户与产品及其使用的服务之间的关系 而 UI 设计不仅仅是将功能需求可视化 还需要创造卓越的用户体验 因此 大多数 UI 设计师需要了解交互
  • 第二十一节:JS中的继承

    上节回顾 1 所有 函数 都有一个特殊属性 prototype prototype指向一个对象 称之为原型对象 原型对象上只有一个属性 constructor constructor又指向了构造函数 形成了一个闭环 2 所有 对象 都有一个
  • C++学习(四六九)LRU Least Recently Used算法

    LRU是Least Recently Used的缩写 即最近最少使用 最近一段时间最少使用 是一种常用的页面置换算法 选择最近最久未使用的页面予以淘汰 该算法赋予每个页面一个访问字段 用来记录一个页面自上次被访问以来所经历的时间 t 当须淘
  • python解释器多版本安装

    文章目录 1 python解释器的安装 2 配置环境变量 3 在cmd窗口使用python多版本 1 python解释器的安装 要想让计算机能够识别并运行高级语言 要对应类型的翻译官 python这种编程语言的翻译官就是python解释器
  • 网页设计手绘板绘画板,适合初学者学习使用,HTML

    作品如下动态图 下载链接在文末 点我免费下载资源 资源下载链接 https download csdn net download weixin 43474701 34854658
  • Linux系统管理

    磁盘管理 磁盘基本概述 Linux中磁盘的命名方式与磁盘的接口有关 规则如下 传统IDE接口硬盘 dev hd a z SCISI接口硬盘 dev sd a z 虚拟化硬盘 dev vd a z 在设备名称的定义规则如下 其他分区可以以此类
  • MongoDB安装(win)Redis安装

    下载MongoDB 全MonogoDB链接 win安装 进入e盘 找到安装好的文件路径 以E 盘为例 在bin目录同级下创建一个文件夹 data 在data里面创建一个db和logs文件夹 进入logs创建一个文本文档 monogo log
  • 为分布式做准备吧——深入理解JVM

    文章目录 类加载机制 类执行机制 字节码解释执行 运行时 编译执行 反射执行 内存回收 内存空间 收集器 Sun JDK可用的GC 之前我们文章提到过 反射 说的比较浅显 我们这里来理解JVM 一个标准的JVM是这样的 JVM负责装载cla
  • 关于 剪映电脑版无法打开的问题!

    剪映专业版 安装到电脑上使用几次后 突然就打不开了 经过几天的漫长查找网上也无一个答案 说什么字体冲突的 都不是病根 这个bug病根是业务层加载不到veCreator dll 代码里尝试去加载veCreator dll dll 导致异常 下
  • 使用OSWatcher来监控服务器

    OSWatcher是oracle提供的监控服务器资源的工具 配合AWR等工具为调优数据库提供基本信息 OSWatcher有支持不同平台 WINDOWS平台下 OSWatcher For Windows OSWFW LINUX平台 OS Wa

随机推荐

  • RGMII信号是什么样子的----大揭秘

    RGMII信号 测试 1 测试RGMII 先判断RGMII信号频率多少 就知道是千兆百兆的模式 发送时钟信号 速率为Gbit s时 时钟速率为125MHz 速率为100Mbit s时 速率为25MHz 速率为10Mbit s时 速率为2 5
  • java自动化测试语言基础之方法

    java自动化测试语言基础之方法 文章目录 java自动化测试语言基础之方法 Java 方法 Java 方法 在前面几个章节中我们经常使用到 System out println 那么它是什么呢 println 是一个方法 System 是
  • Linux网络通信----htonl()、htons()、ntohl()、ntohs()四个函数

    转载 https blog csdn net miao19920101 article details 69398158 前言 今天在工作中用到htonl 这个函数 不是很理解 查阅资料之后随笔就记录下来 方便以后工作和学习翻阅 首先需要说
  • python反复运行清空plot图_仅清除matplotlib图的一部分

    我正在使用嵌入在Wx Python GUI中的matplotlib图来呈现一些数据 图中的内容 显示的数据 随点击按钮的功能不断变化 数据有两种类型 1 轮廓线 self axes contour x scale map y scale m
  • 并发锁的学习

    锁 锁的定义 锁是用来协调多个线程并发访问同一共享资源时带来的安全问题 频繁用锁必然会带来性能问题 但不用锁又会造成安全问题 1 从性能上分 乐观锁和悲观锁 乐观锁 CAS自旋锁 是非常经典的乐观锁 并发性能比较好 但是自旋会造成很大的开销
  • Python经典练习题——求水仙花数

    严格来说 我并不知道何谓 水仙花数 因为以前读书时根本没听过这种数 也不知道这种数有什么特征 后来从事编程之后反而听说了所谓的 水仙花数 如果通过网络查询 则发现水仙花数的定义也不统一 比如通过baidu百科查到如下定义 水仙花数 Narc
  • 元数据管理工具atlas初探

    元数据管理工具atlas初探 安装 Ambari添加服务 略 Hive配置 将atlas主节点 usr hdp 2 6 3 0 235 atlas hook拷贝到其他节点 自定义hive env HIVE AUX JARS PATH usr
  • 携手区块链技术,踏上可信“双碳”之路

    自中央明确提出碳达峰碳中和的 双碳 目标以来 区块链技术凭借能为碳排放 碳足迹打上可信标签的天赋异禀 引起了政策部门 学术界及产业实践代表们的高度重视 7月11日 在第33个全国节能宣传周之际 全国低碳日前夕 微众区块链联合金链盟 FISC
  • gcc生成静态库与动态库(附带使用方法)

    目录 前言 1 gcc生成静态库 从使用者的角度出发 如何使用别人的静态库 方法1 方法2 直接使用静态库 2 gcc生成动态库 动态库的使用 第二种方法 与使用静态库的方法一样 解决方案 方法3 ldconfig 配置 etc ld so
  • json解析豆瓣数据

    继续上次的文章 我们找到了json的数据包 那么证明我们可以获取到他们的数据 点击Headers Request URL对应的就是json数据的url 找到url之后我们就可以开始爬虫了 import requests import jso
  • Windows和Linux混合系统通过AD域实现用户集中认证

    一 Windows AD域 1 统一认证简介 管理的Linux服务器和Windows服务器如果很多 如果都用本地用户名管理 要管理和记住几十台甚至上百台服务器的不同账号不同密码 这是很难的 但是如果所有服务器账号密码都设置一样 那又完全没有
  • Unity的C#编程教程_59_字典 Dictionary 详解及应用练习

    文章目录 C Dictionary Introduction C Dictionary Looping through Dictionary C Dictionary When to Use C Dictionary Using Dicti
  • 自举电路原理

    文章目录 一 自举电路核心原理 二 为什么要自举升压 三 简单的自举电路模型 四 自举电路在高电压栅极驱动电路中的应用 1 MOS管Q开通时 2 MOS管Q关断时 一 自举电路核心原理 电容两端电压不能突变 根据电容公式 i t C du
  • 2023智源大会议程公开丨具身智能与强化学习论坛

    6月9日 2023北京智源大会 将邀请这一领域的探索者 实践者 以及关心智能科学的每个人 共同拉开未来舞台的帷幕 你准备好了吗 与会知名嘉宾包括 图灵奖得主Yann LeCun 图灵奖得主Geoffrey Hinton OpenAI创始人S
  • 使用AddN构建tensorflow简单图例

    import tensorflow compat v1 as tf import numpy as np Define a model a computational graph Parameters for a linear model
  • 宋浩线性代数笔记(二)矩阵及其性质

    更新线性代数第二章 矩阵 本章为线代学科最核心的一章 知识点多而杂碎 务必仔细学习 重难点在于 1 矩阵的乘法运算 2 逆矩阵 伴随矩阵的求解 3 矩阵的初等变换 4 矩阵的秩 去年写的字 属实有点ugly 大家尽量看
  • R语言备忘录

    title dataclear rbase author MengKe date 2023 03 12 output html document 1 Load R packages library ggplot2 library tidyr
  • p2b网络

    把p2b的工作推广到p2rb 目的 学习目标检测 熟悉目标检测 为自己写论文打基础 我的碎碎念 真的是fuck了 自己这个东西整了这么久 还是没有整出来 从5月分我就开始了把 因为考试 因为自己喜欢玩游戏 因为我tm真的浪费了好多时间 像个
  • Vue 基于ElementUI 封装table表格组件 + pagination分页组件

    效果展示 状态页面 用户页面 Vue 源码 定义封装组件 Pagination vue
  • c 中 中文乱码_Windows平台C语言程序在控制台显示中文乱码分析及解决

    前言 初学者在Windows平台上进行C C 语言 中文 程序开发时 有时会遇到编译报错 在控制台运行时显示中文乱码的问题 本文就此类问题进行描述 展开原因分析 然后给出解决方法 本次分享内容的目录如下 基本概念 字符集 字符编码 代码页