Source Insight完美转换UTF-8 到 GB2312

Source Insight 4.0 编码设置:GB2312/UTF-8/GB18030 3种方案根治中文乱码 本文深入解析Source Insight 4.0中文乱码问题,提供GB2312、UTF-8和GB18030三种编码方案的详细配置指南。从乱码诊断到系统级设置,帮助开发者彻底解决编码问题,提升开发效率。适用于跨平台项目和团队协作场景。 阅读详情
AI摘要

本文介绍了一种将UTF-8编码的文件转换为GB2312编码的方法,并提供了一个可集成到SourceInsight的工具。此工具支持智能识别编码方式及批处理操作。

Source Insight完美转换UTF-8 到 GB2312

文/蒹葭

前言

很多人用source insight 打开某些源码文件时,汉字显示为一堆乱码。这个问题是因为编码方式不同。记事本和一些编辑器默认编码方式是ANSI,在这种方式下输入汉字,其实就是GB系列的编码方式。不幸的是,广收欢迎的代码查看工具Source insight 虽然支持汉字,但是它不支持UTF-8。笔者感到疑惑的是,当初开发source insight的这帮人现在哪里去了?为何不继续开发?这么好的工具,却不再更新了,实在让人可惜。

可惜归可惜,程序还是要看。乱码怎么办?很多人用笨方法,用记事本打开源代码,再另存为ANSI格式的文件。如果文件只有几个,倒是既简单又实惠,然而,当你碰到成百上千的代码文件都是UTF-8时,你就会觉得这是梦魇了。

不过,不要怕。现在,完美的解决方法来了。(貌似跟做广告一样)

概述

本程序是参考网上源代码修改而成。感谢原作者将该代码开源,我的工作只需在他的基础上进行修改就可以了,省去了大量的工作,使得我花了一个下午的时间就改成我所想要的程序。这就是开源的好处。所以说开源能帮助人们更快的开发出更好的软件,开源万岁。希望看到本文的读者,也能为开源事业贡献自己的一份力量。虽然说,此类代码到处都有,不足为奇,但这个代码在我改进之后,还是具有一些优点:

l         命令行执行  改进前的程序只能单独执行,根据提示输入参数和要转换的目录或文件;改进后的程序可集成到编辑器,集成开发环境(IDE)中。下文将会介绍如何集成到source insight中。

l         智能识别编码方式  原来的程序不能识别编码方式。如果转换时选择了一个非UTF-8编码的文件,转换后就成了乱码;改进后的程序能智能识别编码方式,无论是UTF-8文件是BOM格式还是非BOM格式,都能识别。对于纯ASCII码的文件,也能识别。

l         支持批处理  改进前的程序有bug,对目录支持不完善;改进后的程序能很好的支持批处理。

 

目前,这个程序只针对源代码文件编写,支持后缀名为 .c .cpp .cxx .h .xml .java .txt等文件。如确实有需要,今后将支持更多类型的文件编码格式转换。

 

如何集成到 source insight?

下面,先介绍如何集成到 source insight里。本人使用的汉化版,如英文版请对照执行。

文件转换命令    该命令能将当前打开的文件进行编码转换。很简单,步骤如下:

在source insight里,选择 “选项”—“自定义命令”,弹出对话框后,点击“添加”,输入新命令名 CodeConvert File 。确定后,点击“浏览”,选择我们的codeConvert.exe程序路径。在输入框里加上参数” –u2g %f” (注意空格,双引号不要)。

这样,这个文件转换命令就添加成功。打开某个文件,按照上面步骤,选择该自定义命令点击“运行”,即可进行转换。

目录转换命令    该命令能将当前打开的文件所在的文件夹进行编码转换。步骤同上,只是在输入框里的参数改为” –u2g %d” (注意空格,双引号不要)。

怎么样?在source insight里点几下,就能转换了。混沌世界一下子清晰了。

主要源码部分

这是检测文件是否是UTF-8格式的函数,其他部分不再一一列出,请参考源代码。

/*!  detect if the fiel is UTF-8 code

/param LPCTSTR filename

/return true/false

*/

bool detect_utf8file(LPCTSTR filename)

{

       const unsigned char BOM[3] = {0xEF,0xBB,0xBF};

       int count_good_utf = 0;

       int count_bad_utf = 0;

       int begin = 0;

       char buf[3]={0,};

       CStdioFile file_r ;

       if(!file_r.Open((char*)(LPCTSTR)filename, CStdioFile::modeReadWrite))

              return false;

 

       file_r.Read(buf,3);

       if(!strncmp(buf,(char *)BOM,3)) {

              std::cout<<"this is utf(BOM). "<<endl;

              file_r.Close();

              return true;

       }

       else {    // detect the whole file

       //     UTF-8 text encoding auto-detection

       //     count the following pairs of consecutive bytes as shown in the table:

       //     11..  10..  good

       //     00..  10..  bad

       //     10..  10..  don't care

       //     11..  00..  bad

       //     11..  11..  bad

       //     00..  00..  don't care

       //     10..  00..  don't care

       //     00..  11..  don't care

       //     10..  11..  don't care

              char current_byte,previous_byte;

              file_r.SeekToBegin();

              file_r.Read(&current_byte,1);

              previous_byte = current_byte;

              while(file_r.Read(&current_byte,1)) {

                     if ((current_byte & 0xC0) == 0x80) {

                            if ((previous_byte & 0xC0) == 0xC0) {

                                   count_good_utf ++;

                            } else if ((previous_byte & 0x80) == 0x00) {

                                   count_bad_utf ++;

                            }

                     } else if ((previous_byte & 0xC0) == 0xC0 ){

                            count_bad_utf ++;

                     }

                     previous_byte = current_byte;

              }

              //     the comparison ">=" handles pure ASCII files as UTF-8,

              //     replace it with ">" to change that

 

              if(count_good_utf > count_bad_utf) {

                     file_r.Close();

                     std::cout<<"the code of this file is utf(no BOM). "<<endl;

                     return true;

              } else if(count_good_utf == count_bad_utf) {

                     file_r.Close();

                     std::cout<<"the code of this file is pure ASCII file as UTF-8. "<<endl;      

                     return true;

              }

              else {

                     file_r.Close();

                     std::cout<<"the code of this file is not utf. "<<endl;

                     return false;   

              }

       }

      

}

 

程序虽然能运行,但是我相信还有bug,还可以完善。本人知识有限,如有不当之处还请多多指正,大家共同进步。源代码在http://download.youkuaiyun.com/source/1741768 ,好像优快云只能在那里上传代码。

 

 

Source Insight 4.0 中文乱码终极解决:3步配置 GB2312/UTF-8 编码(附决策树) 本文详细解决了Source Insight 4.0中文乱码问题,提供3步配置GB2312/UTF-8编码的终极方案,包括单文件修正、全局设置和混合编码处理技巧,并附有决策树帮助开发者快速选择最佳编码方案。 阅读详情

相关推荐

完美转换UTF-8 到 GB2312(源代码和详细说明)

很多人用source insight 打开某些源码文件时,汉字显示为一堆乱码。这个问题是因为编码方式不同。记事本和一些编辑器默认编码方式是ANSI,在这种方式下输入汉字,其实就是GB系列的编码方式。不幸的是,广收欢迎的代码查看工具Source insight 虽然支持汉字,但是它不支持UTF-8。笔者感到疑惑的是,当初开发source insight的这帮人现在哪里去了?为何不继续开发?这么好的工具,却不再更新了,实在让人可惜。 可惜归可惜,程序还是要看。乱码怎么办?很多人用笨方法,用记事本打开源代码,再另存为ANSI格式的文件。如果文件只有几个,倒是既简单又实惠,然而,当你碰到成百上千的代码文件都是UTF-8时,你就会觉得这是梦魇了。 不过,不要怕。现在,完美的解决方法来了。

source insight utf-8与GB2312切换时出现乱码问题

目标:在utf-8编码下也能正常显示,不出现乱码首先,我们先要在没有乱码的情况下预览点击左上角File --> relead ad encoding,比如我选GB2312,在这个编码下,不会显示乱码 然后我把整个代码拷贝下来,复制到一个记事本中,注意记事本需要是utf-8编码,这在“另存为”时是可以设置的 然后我们回到source insight,把编码切换回utf-8 然后我们把刚刚粘贴到记事本的代码复制粘贴到source insight中,就ok了,这样我们保证在utf-8编码下不会出现乱码了..

Dontla的博客 2603

记一次wireshark抓取QQ好友IP和火绒抓取微信IP

事情是这样的,,上个周,手机离奇的被盗,但没有关机,为了找回手机,粗学了一手QQ抓ip的手段。 这里我就直接做个演示,解析关键的点。 三种思路i. wireshark 抓取手机在线IPii 火绒抓取 微信在线接听IPiii 火绒抓取 微信在线不接听IP i. wireshark 抓取手机在线IP wireshark抓好友QQ的ip要求和对方打语音的时候要手机在线。 这里说一下,打语音和视频是直接能和对方建立连接,如果发文件,是直接发给腾讯的,抓不到包。 1.打开wireshark,通过电脑Tim给对方打语音

qq_29437513的博客 1万+

Source insight4.0配置成兼容UTF-8 和 GB2312的字符编码

点击进入Eeload As Encoding 选择UTF-8 with BOM 大功告成!

KUNPLAYBOY的博客 7581

Halcon 简单的形状匹配定位与区域跟随

【代码】Halcon简单的形状匹配定位与区域跟随。

唐大狗 2806

kettle信息发送钉钉

由于其他的作业比较多,想要在job中加入一个转化发送消息到钉钉,其他的配置说明直接获取系统的信息。这样也避免直接修改其他的转换和大量的工作量。 步骤: 1、新建一个转换 拉取获取系统信息、获取变量、JavaScript代码、获取access_token组件。 2、获取系统信息设置 拿到需要的信息,比如作业的读写更新删除行数,job的日志内容 这个日志内容同在作业执行页面下输出的日志,所以可以在执行作业时选择是详细日志、基本日志还是错误日志。 3、获取变量 获取变量主要是想要去拿到job的名称,文件名。按

Deng_7788的博客 1448

Source Insight乱码的解决方案,SI不支持UTF-8字符编码乱码

最近使用source insight查看一些开源代码,显示中文就乱码,据说是因为source insight不支持utf-8编码,默认编码方式为ANSI码。所以需要将utf-8等非ANSI码的文件转换成source insight默认支持的ANSI码格式才能显示中文不乱码。 【问题】 用Source Insight打开一个Python文件,其中包含中文,但是中文在SI中显示的是乱码: 【

IT之路的博客 2万+

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 解决思路 发生未知错误。 解决方法 很可能是因为当前电脑下载的cuda版本不适合当前电脑GPU支持的cuda版本! 推荐文章:CV:Win1..

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 7524

source insight 中文注释乱码解决

由于linux上使用utf-8编码,sourceinsight并不支持utf-8,使用sourceinsight阅读linux项目源代码时,经常会出现中文乱码,本工程主要用于实现转码功能,将utf-8文件转换为sourceinsight可识别的gb2312编码。 主要有以下功能: 1. 转换当前目录和子目录的文件。 2. 系统默认转换txt, cpp, h, java, hpp, php 六

1760

2026全网最新华为OD机试真题目录A+B+C+D+E卷(持续收录中)-Python版

🔔本文收录于「最新最全华为OD机试真题(Python版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!本人所写题库均精心搜集于互联网。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅读使用!

**My Coding Family** 10万+

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5524

修改原来的Source Insight完美转换UTF-8 到 GB2312

使用原作者的source insight 转换CodeConvert.exe:http://blog.youkuaiyun.com/flylonginsky/article/details/4670188 1.点击运行时报错了:找不懂xx.dll, 用vs打开编译时是不能编译过的,报错:“MultiByteToWideChar”: 不能将参数 5 从“unsigned short [2048]”转换为“L

chenrunhua的专栏 3846

YOLO26改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样操作,相比P3/

Limiiiing的博客 351

Source Insight 将UTF-8格式的JAVA文件转换为GB2312格式的JAVA文件

导师逼着要改进建议,正好最近几天组内的其他成员要进行code review,自己又不想将他们的代码导入eclipse,主要是自己有个强迫症,不喜欢看到工程中有错误和警告,导入他人的代码难免会产生错误。于是就想到了用Source Insight进行code review工作,比较悲催的是Source Insight好像不支持UTF-8的编码,公司的代码又都是UTF-8编码的,这就比较麻烦了(代码注释

wyjie1987的专栏 3065

还在纠结二层交换机和三层交换机的区别?这篇文章帮你讲明白!

你好,这里是网络技术联盟站,我是瑞哥。公众号后台有小伙伴想要写一篇文章具体介绍一下二层交换机和三层交换机,此类的文章,之前写过几篇,今天瑞哥再写一篇,希望对大家有所帮助!

网络技术联盟站 4441

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

GB2312、UTF-8、UCS-2编码转换实战:原理、坑点与自动化方案

字符编码是计算机处理文本信息的基础,它定义了二进制数据与字符符号之间的映射规则。其核心原理在于为每个字符分配一个唯一的数字标识(码点),并通过不同的编码方案(如定长、变长)将其转换为字节序列进行存储和传输。理解编码体系的技术价值在于确保数据在跨系统、跨平台交换时的完整性与一致性,避免乱码问题。这在数据迁移、国际化应用开发、历史系统维护等场景中至关重要。本文聚焦于GB2312、UTF-8与UCS-2等常见编码间的映射关系与转换实践,针对开发中遇到的**PowerShell7设置UTF-8**输出乱码、**K8

weixin_30588675的博客 446

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Source Insight乱码解决方案

【原因】:SI不支持UTF-8字符编码乱码 最近使用source insight查看一些开源代码,显示中文就乱码,因为source insight不支持utf-8编码,默认编码方式为ANSI码。所以需要将utf-8等非ANSI码的文件转换成source insight默认支持的ANSI码格式才能显示中文不乱码。 【问题】 用Source Insight打开一个C文件,其中包含中文在SI中显示的是乱码 【解决过程】 1、在notePad++看这个文件,是UTF-8编码的 2、想办法让其正.

llzhang_fly的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

GB2312、UTF-8、UCS-2编码对照:原理、转换与乱码排查实战

字符编码是计算机存储和处理文本的基础,它定义了字符与二进制数据之间的映射规则。其核心原理在于为每个字符分配唯一的数字标识(码点),并通过特定算法转换为字节序列。理解编码原理对于确保数据在不同系统间正确交换至关重要,尤其在处理中文等多语言文本时。GB2312、UTF-8和UCS-2是三种关键编码方案,分别代表了不同时期和场景下的技术标准。掌握它们之间的对应关系与转换方法,能有效解决文件乱码、数据库字符集设置错误(如 `error while setting value '.-default-character

weixin_34007886的博客 457

source insight 中文注释乱码原因及解决方案

问题现象 在我们使用source insight 查看代码时经常会出现中文乱码问题,严重影响我们的代码阅读体验。 网友提供的两种解决方案 方法一: 设置source insight 编码方式 单个文件乱码解决办法: 菜单栏中【File】 > 【Reload As Encoding…】 > 【Chinese Simplified (GB18030)】 > 选择后,点击load,问题解决!!! 所有文件乱码解决办法: 菜单栏中 【Options】 > 【Preferences】 &

longcheng217的博客 7万+

GB2312、UTF-8、UCS-2编码对照表:解决中文乱码的终极指南

字符编码是计算机存储和处理文本的基础,它定义了字符与二进制数字之间的映射关系。其核心原理在于为每个字符分配一个唯一的数字标识(码点),不同的编码方案则决定了这些码点如何转换为字节序列进行存储和传输。理解编码原理具有极高的技术价值,它是确保数据在不同系统、平台和应用程序间正确交换与显示的关键,能从根本上解决乱码问题,保障信息的完整性与一致性。在实际应用场景中,无论是处理遗留系统的GB2312编码数据、配置现代开发环境的UTF-8支持,还是进行跨平台的数据迁移与清洗,掌握编码对应关系都是不可或缺的技能。本文聚焦

weixin_30785593的博客 405

linux 不支持utf 8,Source Insight乱码的解决方案,SI不支持UTF-8字符编码乱码

类型:编程工具大小:5.8M语言:中文 评分:2.2标签:立即下载最近使用source insight查看一些开源代码,显示中文就乱码,据说是因为source insight不支持utf-8编码,默认编码方式为ANSI码。所以需要将utf-8等非ANSI码的文件转换成source insight默认支持的ANSI码格式才能显示中文不乱码。【问题】用Source Insight打开一个Python文...

weixin_34220502的博客 836
上一篇: ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS的区别和由来。
下一篇: 激光打印机的原理、碳粉分类
张志龙
博客等级 码龄24年 412粉丝 131原创
评论 29
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值