关于UTF-8、GBK编码以及编译时charset的指定的一些总结

2023-11-03

首先分清两个概念:C文件中(转换为16进制)汉字的编码,编译后bin文件中汉字的编码。

gcc的 -finput-charset 和 -fexec-charset 两个选项的存在就是为了实现这两者的转换。

1. 默认情况下,gcc使用UTF-8 charset。

2. C文件中使用GBK编码的汉字:若要使bin文件为UTF-8编码,必须同时指定 -finput-charset=GBK,-fexec-charset=UTF-8(不指定fexec-charset也是可以的,但是单独指定它无效,编译器会认为输入为UTF-8)。若要使bin文件为GBK编码,可以不指定charset,这样编译器就不会去做转换(它认为前后都是UTF-8),看起来就像是“骗过”了编译器;也可以同时指定 -finput-charset=GBK,-fexec-charset=GBK。

3. C文件中使用UTF-8编码的汉字:若要使bin文件为UTF-8编码,可以不指定charset;若要使bin文件为GBK编码,必须指定 -fexec-charset=GBK。当然,如果你想“欺骗”编译器:“我的C文件使用的是GBK编码”,而去指定-finput-charset=GBK,这时编译器可能不会像上面那种情况一样好骗,你可能收到这样一条答复:“cc1: error: failure to convert GBK to UTF-8”。

 

举个例子:我在程序中需要去调用HZK16(点阵字库),它是基于GBK编码的,所以,我希望我的bin文件中的汉字是GBK编码。我在UE编辑器中,使用GBK编码写了xxx.c,又使用UTF-8编码写了yyy.c,那么,我将可以用以下几种方式去编译它们:

对于xxx.c:

(1)gcc   -o   xxx  xxx.c

(2)gcc    -finput-charset=GBK    -fexec-charset=GBK    -o    xxx   xxx.c

对于yyy.c:

(1)gcc   -fexec-charset=GBK   -o   yyy   yyy.c

(2)gcc   -finput-charset=UTF-8   -fexec-charset=GBK   -o   yyy   yyy.c

 

总而言之,-finput-charset 用来指定 C文件中的文字编码格式,-fexec-charset 用来指定编译之后的可执行文件的文字编码格式;默认情况下,gcc编译器认为编译前后的文字编码格式都是UTF-8。

至于 “为什么要指定 -finput-charset 或者 -fexec-charset ?” ,那是可能你的程序中的某部分的操作必须依赖于某个特定的charset 。例如上文所说的,使用 HZK16 来获取汉字的位图等。

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

关于UTF-8、GBK编码以及编译时charset的指定的一些总结 的相关文章

  • decltype 和隐藏外部名称的类成员名称之间的交互

    这段代码 int clash struct Foo decltype clash clash 在 clang 上静默编译 但在 gcc 上编译失败并给出错误 错误 声明 int Foo clash fpermissive 错误 将 冲突 的
  • 字段的 __attribute__((packed)) 如何影响包含该字段的结构?

    如果我有一个打包字段 为什么我的整个结构会被打包 Example include
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等效项是什么?

    如何在不使用 argc argv 的情况下访问 Mac OS X 上的命令行 在 Linux 上 我会简单地阅读 proc self cmdline or use GetCommandLine在 Windows 上 但我找不到 Mac OS
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https
  • 在运行时检查 GCC 版本

    我需要找出 C 程序执行过程中 运行时 可用的 系统中安装的 GCC 版本 主要版本和次要版本 意思是 以编程方式提取可用 gcc 的版本 就像我在 shell 中输入 gcc version 一样 但在 c 程序中 The GNUC an
  • gcc - 如何从静态库输出 (.a) 中删除所有绝对路径

    我正在使用 GCC for ARM 红色套件 4 恩智浦 http www code red tech com red suite 4 nxp php 我正在编译用于最终应用程序的静态库文件 a 我需要配置项目 以便任何开发人员都可以生成完
  • 为 OpenWrt 编写和编译程序

    我有一个在 OpenWRT 下运行的具有 MIPS 架构的嵌入式设备 系统类型 MediaTek MT7628AN ver 1 eco 2机器 WRTnode2P 处理器 0CPU型号 MIPS 24KEc V5 5 我想通过我的电脑 ub
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • 跨 CPU 内核的 rdtsc 精度

    我从一个线程发送网络数据包 并在运行于不同 CPU 核心上的第二个线程上接收回复 我的流程测量每个数据包发送和接收之间的时间 类似于 ping 我使用 rdtsc 来获得高分辨率 低开销的计时 这是我的实现所需要的 所有测量结果看起来都很可
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog
  • 如何在Linux中自动启动需要X的应用程序

    我试图在系统进入运行级别 5 时自动启动 X 应用程序 这样做的正确方法是什么 我写了一个脚本并将其放在 etc init d 中 我已运行适当的 chkconfig 命令来设置 etc rcX d 目录中的符号链接 一切工作正常 除了当我
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并

随机推荐

  • 服务计算——Docker 简单使用

    Docker 简单使用 Docker是一个应用容器引擎 使用者可以将其应用以及所有需要的依赖打包到一个包中 然后发布到机器上进行运作 接下里我们就一步步了解一些Docker的使用 Docker安装 sudo apt get install
  • STM32-GPIO输入

    点亮LED灯的实验室利用的GPIO的输出配置来实现的 接下来写一个关于GPIO作为输入的程序 同时点亮和熄灭LED灯 由于程序简单 直接贴出代码 以供参考 include stm32f10x h brief 初始化GPIO 默认速度为GPI
  • 判断英伟达显卡计算力及是否支持FP16和INT8

    文章目录 1 检查显卡的计算力 打开 官网 检查你相应型号显卡的算力 比如GTX1080 is 6 1 Tesla T4 is 7 5 2 检查是否支持FP16和INT8 打开网页查看
  • Python 3.11.3在Windows 11下的简易安装教程

    撰写时间 2023年4月6日 本文目的 帮助电脑小白快速安装最新版本的Python 并通过控制台输出第一个Python语句 Hello World 前言 Python是一种高级编程语言 具有简单易学 代码简洁 功能强大 可移植性佳等特点 由
  • 《30天自制操作系统》harib09c的编译和调试

    今天是 30天自制操作系统 学习的第12天 今天的工程目录是harib09c 我起的目录名称是day12 boyC 我们一起来调试一下 在day12 boyC目录下直接运行make命令就开始编译了 如下图所示 编译的结果如下 部分截取 E
  • Java Interface

    Java接口中的成员变量的修饰符都是 public的 static的 final 的 类这么写错的 一个类不能既是final 又是abstract的 因为abstract 因为类被继承使用 而 final却不允许类被继承 这是自相矛盾的 p
  • 从零开始学WEB前端——VUE脚手架

    项目介绍 先做个自我介绍 本人是一个没人写前端所以就自学前端的后端程序员 在此项目中我会和大家一起从零基础开始学习前端 从后端程序员的视角来看前端 受限于作者的水平本项目暂时只会更新到前端框架VUE 不会涉及node js 该项目适合零基础
  • Nginx安装、配置

    一 Nginx概述 特点 Nginx engine x 是一个轻量级的 高性能的 基于Http的 反向代理服务器 静态web服务器 具有以下特点 1 高并发 一个Nginx服务器在不做任何配置的情况下并发量可达1000左右 在硬件条件允许的
  • unity hub突然打不开,解决记录

    1 情况 管理员身份运行无效 从unity cn下载安装无效 从unity com下载安装无效 2 失败原因 安装的时候一直用的之前的安装路径 始终打不开 3 解决 换了新的安装路径 成功解决
  • 开源进展|WeCross v1.3.0发布,支持适配FISCO BCOS v3.0

    WeCross是微众银行自主研发并完全开源的区块链跨链协作平台 致力于促进跨行业 机构和地域的跨区块链信任传递和商业合作 有助于实现异构区块链系统之间安全可信的互操作 WeCross v1 2 0自发布以来 得到了众多社区伙伴的支持和反馈
  • BlogTest1

    常见数据结构题 SparseArray SparseBooleanArray HashMap
  • 安防监控视频云存储平台EasyNVR出现内核报错的情况该如何解决?

    安防视频监控汇聚EasyNVR视频集中存储平台 是基于RTSP Onvif协议的安防视频平台 可支持将接入的视频流进行全平台 全终端分发 分发的视频流包括RTSP RTMP HTTP FLV WS FLV HLS WebRTC等格式 近期有
  • 【全教程】Pycharm运行深度强化学习代码(pytho与matlab混编)

    记录自己运行的第一个深度强化学习项目的全过程 配置环境花了4h 代码终于跑起来啦 配置环境 下面是具体的配置流程 首先报的第一个错误是 ModuleNotFoundError No module named matlab engine ma
  • Arduino和LabVIEW射频灾害紧急报警系统

    该项目将在发生灾难时生成紧急警报 该系统分为两部分 传感器节点和 2 服务器 连接该开关阵列以在处理端生成紧急信号 然后将其发送到传感器节点 图1给出了系统框图 物料清单 接线 原理图 代码 传感器节点端代码 处理端代码 仿真模型 LabV
  • 【实验五】【创建视图并通过视图操作表数据】

    文章目录 视图 原表 一 创建视图 二 插入数据 三 更新数据 四 删除数据 Reference 视图 简介 视图可以看作定义在SQL Server上的虚拟表 视图正如其名字的含义一样 是另一种查看数据的入口 常规视图本身并不存储实际的数据
  • 渗透第一步之DNS信息收集技巧。

    正向查询 首先 最简单最快速的是 使用ping命令输入域名来获取其ip地址 或者 使用nslookup命令来指定域名获取ip地址 Server 192 168 90 83 DNS服务器 Address 192 168 90 83 我们解析到
  • Redis实现用户签到

    目录 一 BitMap用法 1 介绍 2 用法 3 练习 二 签到功能 1 需求 2 代码实现 三 签到统计 1 分析 2 接口实现 一 BitMap用法 1 介绍 我们完全可以通过数据库签到表来实现签到功能 但是假如我们的用户达到千万 每
  • 关于VS2019出现“const char *“ 类型的实参与 “char *“ 类型的形参不兼容错误的解决方法

    解决办法 法1 在VS2019中依次点击项目 gt 属性 gt C C gt 语言 gt 符合模式 将原来的 是 改为 否 即可 法2 这种问题也有可能是因为局部变量没有进行初始化内存 也就是new和delete操作符的运用 include
  • 算法通关村-----链表中环的问题

    环形链表 问题描述 给你一个链表的头节点 head 判断链表中是否有环 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置 索
  • 关于UTF-8、GBK编码以及编译时charset的指定的一些总结

    首先分清两个概念 C文件中 转换为16进制 汉字的编码 编译后bin文件中汉字的编码 gcc的 finput charset 和 fexec charset 两个选项的存在就是为了实现这两者的转换 1 默认情况下 gcc使用UTF 8 ch