首页 > 系统相关 >C++windows编码问题

C++windows编码问题

时间:2024-03-14 11:58:20浏览次数:35  
标签:编码 ok 操作系统 字符 windows gbk C++ 空格

需要注意的编码方式有三处:

操作系统、程序编码(与源文件编码一致)、通信对方传入字符的编码

程序编码(与源文件编码一致) 操作系统编码 对方传入的编码 中文是否ok c2A0编码的空格
utf-8 utf-8 utf-8 ok ok
utf-8 gbk gbk 正常中文可以,特殊空格不行 ok 不ok
gbk gbk gbk ok 不ok

一、操作系统

本地文件路径编码跟随操作系统的编码

如操作系统编码为GBK

(修改为UTF8的方法)

看操作系统文件编码:复制文件名到UE中,然后Ctrl + H看编码格式

二、程序

 源文件编码会对字符串编码产生影响(string格式自带编码方式、char[]不含编码)

三、特殊空格字符C2A0(半角非中断空格)

note:

在UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它,常出现于HTML中的&nbsp。但是GB2312、Unicode之类并没有这样的字符

 因此在GBK编码的环境下,将无法处理这样的字符

附:

 1 //测试读取指定目录下所有文件(编码),并尝试打开文件
 2 void scan_directory(const std::string& path) {
 3     WIN32_FIND_DATA fileData;
 4     string pathAll = path + "*";
 5     HANDLE hFind = FindFirstFile(pathAll.c_str(), &fileData);
 6     if (hFind != INVALID_HANDLE_VALUE) {
 7         do {
 8             // 跳过目录和子目录  
 9             if (!(fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
10                 std::cout << path << fileData.cFileName << std::endl;
11                 //string pathFile <<fileData.cFileName;
12                 std::ifstream file(path + fileData.cFileName, std::ios::in | std::ios::binary);
13                 if (!file.is_open()) {
14                     std::cerr << "Error opening file: " << fileData.cFileName << std::endl;
15                     LOG_ERROR_ZHWD("Error opening file %s\n", fileData.cFileName);
16                     //return FILE_ERROR;
17                 }
18                 file.close(); // 确保文件正确关闭  
19             }
20         } while (FindNextFile(hFind, &fileData));
21         FindClose(hFind);
22     }
23     else {
24         std::wcerr << L"Error occurred while listing directory." << std::endl;
25     }
26 }  
27 int main() {  
28     string path = "D:/temp2024/";
29     scan_directory(path);
30     return 0;  
31 }

 


引用: UTF-8转GBK的悲剧:特殊字符C2A0_gbk特殊字符-CSDN博客
c2a0 这样的空格 NO-BREAK SPACE - 简书 (jianshu.com) (侵删)

标签:编码,ok,操作系统,字符,windows,gbk,C++,空格
From: https://www.cnblogs.com/jessicaland/p/18072523

相关文章

  • Windows下一个普通权限的账户,怎么启动一个有管理员权限的进程
    我们知道,如果Windows下一个普通权限的账户,直接启动管理员权限的进程,会弹出输入管理员账号密码的提示窗。但是如果我想通过自启动一个管理员权限的进程怎么办呢,既然都自启动了,还要我输入账号密码就说不过去了。一开始尝试了任务计划程序中的“运行任务时,请使用下列用户账户”,赋值......
  • Lua 如何在Lua中调用C/C++函数
    Lua调用C函数有两种方式程序主体在C中运行,C函数注册到Lua中。C调用Lua,Lua调用C注册的函数,C或者Lua得到函数的执行结果。程序主体在Lua中运行,C函数作为库函数供Lua使用。C++的代码如下如何在Lua脚本中调用这个C语言函数(add_function)?#include<QCoreApplication>#inclu......
  • Windows10, 11上,您可以使用以下PowerShell命令来启用Hyper-V功能组件 Windows server 2
    Windows11上,您可以使用以下PowerShell命令来启用Hyper-V功能组件:powershellCopyCodeEnable-WindowsOptionalFeature-Online-FeatureNameMicrosoft-Hyper-V-All这个命令将启用所有与Hyper-V相关的功能组件。请确保以管理员权限在PowerShell中运行此命令。执行以上命令后,系......
  • Windows下Nginx的启动,停止,重启等命令
    假设安装在E:\server\nginx-1.20.0目录下cmd命令进入安装文件启动E:\server\nginx-1.20.0>startnginx或E:\server\nginx-1.20.0>nginx.exe注意:建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作。停止E:\server\nginx-1.20.0>nginx.exe-sstop或E:\serv......
  • C++工程(五):CMake+NDK交叉编译
    写一个HelloWorld#include<iostream>intmain(intargc,charconst*argv[]){for(inti=0;i<5;++i)std::cout<<"HelloWorld"<<std::endl;return0;}build_for_android.sh脚本文件#/bin/bashexportANDROID......
  • m基于FPGA的Alamouti编码verilog实现,包含testbench测试文件
    1.算法仿真效果 本系统进行了Vivado2019.2平台的开发,结果如下:   2.算法涉及理论知识概要        在无线通信领域,多天线技术是提高系统容量和可靠性的关键手段之一。Alamouti编码是空时编码(STC)的一种,它为两发射天线的系统提供了一种全速率、全分集的简单编码方......
  • Windows逆向之配置虚拟机环境
    安装虚拟机环境首先下载吾爱破解论坛专用版虚拟机软件VMWareWorkstation12,注册成功;再通过虚拟机启动论坛提供的WinXP系统镜像,在我的win11上完美运行。实现文件互传为了实验方便,下面要配置物理机和虚拟机之间的文件互传功能。我尝试用过VMware自带的共享文件夹和复制粘贴,但出......
  • 如何在Windows 10中恢复已删除/丢失的驱动程序?这里有几种方法
    如果你意外删除了Windows10中的驱动程序,可以尝试3种解决方案来恢复删除的驱动程序。回滚驱动程序1、按Windows+X,然后选择设备管理器以在Windows10中打开设备管理器。2、展开设备类别,并选择没有驱动程序的目标设备。3、双击目标设备以打开其“属性”窗口。4、单击驱动程......
  • Windows粘滞键后门
    Windows粘滞键后门原理:把sethc.exe粘滞键功能替换成cmd.exe的shell窗口,连续按5次shift键即可呼出cmd。①粘滞键替换成cmd的基本应用1、找到粘滞键应用所在的位置。在C:/Windows/System32这个目录(系统进程的目录)下可找到粘滞键sethc这个应用程序(系统进程)。2、备份要用到的文件......
  • 【C++】继承
    目录一、继承的概念和定义1.1、继承的概念1.2、定义方式1.3、继承关系和访问限定符二、基类和派生类对象的赋值转换三、继承中的作用域四、派生类的默认成员函数问题:子类编译默认生成的构造函数会做什么?4.1、构造函数4.2、析构函数4.3、拷贝构造4.4、赋值运算符......