Open nobodxbodon opened 2 years ago
@HaujetZhao 早先遇到过一个编码问题,见前文:都市传说: "部分"中文出现乱码
不妨探讨一下各种原因和可能的解决方案。比如,是由中文字符串还是中文命名标识符引起的、是否需要控制台编码设置,以及如果无法规避的话是否可以开发相关工具链解决(编辑器、运行环境等等)。
无法解决,这是历史问题。在文件中使用中文变量命名,没问题。
但是输出中文字符串、使用中文路径、读取文件有含有中文的元数据,就有问题。
有绕弯子的办法,使用第三方库进行编码转换。exiftool exiv2 开发者都搞了,说太难,搞不动。
编译器是要把常量处理成字节码的,如何处理,已经由源码编码决定了,还能有什么办法?只能搞中间拓展层。有能力搞、搞得出来、搞出来各个系统都能用、搞了别人愿意用,这都是难题。
计算机世界本就是不完美的,只能接受这个设定。
C 和 C++ 都是底层最接近汇编、硬件的,历史包袱很重,对他们不太期待完善的中文处理了。我目前也就敢在 Python 这样的解释语言中肆意用中文。
之前ffmpeg打印带有中文的元数据内容也是乱码,后来不知道什么版本起在 chcp 936
和 chcp 65001
都能正常显示中文
所以我认为编码问题是能解决的
之前ffmpeg打印带有中文的元数据内容也是乱码,后来不知道什么版本起在
chcp 936
和chcp 65001
都能正常显示中文 所以我认为编码问题是能解决的
其时间和精力成本无法普及到大多数程序员所写的程序上。
个人认为,技术终归是为需求服务而且不断进步的。用中文的多了,迟早会有辅助或者解决方案出现。IDE的中文补全辅助插件就是个最近的例子。
想当初,上世纪七十年代还有专家认为 ”汉字无法进入电脑“ 呢。
编码问题大多是因为程序未使用Unicode API。作者一般可以修改。技术栈太老太封闭确实困难,但C/C++不在此列。C/C++是最底层的,这也就意味着,它要是不支持Unicode,别的程序凭什么支持。
汉字路径,汉字文件名,Dev-C++ 5.11 (minGW GCC 4.9.2)
UTF-8文件,或GBK文件+编译参数-finput-charset=GBK
在Windows控制台 CP936 & CP65001 都没有乱码
#include <stdio.h>
#include <locale.h>
int main(void) {
setlocale(LC_ALL, "");
wprintf(L"你好");
}
Windows编码问题比较多 ANSI
// nodejs
spawnSync('pwsh', ['-c', 'Get-Clipboard'])
require('child_process').spawnSync('powershell', ['-c', '[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;Get-Clipboard'], { encoding: 'UTF-8' } )
中文编码,史诗巨坑【
当然如果把范围划定为“易用通行的,写代码用用,但别指望它覆盖一切汉字高级需求的”,则直接unicode。
就是要记住,不要认为unicode能完全解决汉字应用的一切需求,不要认为所有字符串数据必须得用unicode。
既然是这个主题,就把我整的大活也发上来【 http://farter.cn/zzdm 字理组字汉字编码,从头开始的汉字编码
普通软件unicode就罢了,如果要做的是处理人名地名古籍等,可能冒出中华文化博大精深的汉字的软件,记得给未来可能使用别的编码方式留门,比如GB13080-2022,比如big5,比如敝编码【
源自 https://github.com/program-in-chinese/team_website/issues/27 :