当前位置: 首页 > news >正文

在Unity环境中使用UTF-8编码

为什么要讨论这个问题

        为了避免乱码和更好的跨平台

        我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快捷的办法让你查看你的编码格式.

d4b54063b3ba42e8857971d094ad3a83.png

点击扩展下的管理扩展

3e5b5deaa20443c49cd81aabd5c33fc1.png

下载该插件,重启VS.

c9665690dafa41fda293ce31fb705bd5.png

然后你就会发现右下角多了编码格式.

        此时如果你写了一些中文注释,并通过git或svn提交了你的代码,假设你们的团队并没讨论过编码问题,而另一个人使用了rider编码(或其他的编辑器),rider默认使用utf8,你的注释到了他那里就是乱码.

如下

681550b83fc74845b4dcb0863ba53e75.png

0c0014a597ac43598581f4b1e72e229c.png

        注意俩张图的右下角的编码,前者是国标,后者是utf8,当然rider可以很方便的转换编码,但是如果脚本多了就很麻烦,且后续仍可能出现乱码问题.

863a55ce15ba41d5956b1ec2ba17e924.png

        并且Unity自身也不支持国标2312,所以一个团队统一使用UTF-8是很有好处的,UTF-8给到国标也不会出乱码.

如何做?

          在讲通用方法之前讲一个笨办法,刚才下载了那个FileEncoding插件后,点击右下方的编码格式选择convert to utf8,但是要注意必须在脚本中写一点中文注释,或者中文字符串,就是说这个文件需要有一点中文,然后点保存,才能成功被改变.

        如果不写中文注释,当再创建一个脚本编译之后,刚才改成utf8的脚本又变回GB2312.并且这个方法需要每个脚本都改一下,有些麻烦.

下面使用一个通用办法来帮助整个团队使用统一的编码规范.

即使用.editorconfig文件

这是一个统一的规范,多数编辑器都支持这个规范.

使用办法

        在Unity根目录添加一个文本文件名字为.editorconfig(注意前面有一个点,然后删掉.txt后缀),记事本打开,粘贴下列内容.此文件放在git/svn仓库的根目录让团队所有人使用.

# 顶级 EditorConfig 文件
root = true###############################
# 编码设置
################################ 所有 C# 文件使用 UTF-8 编码
[*.cs]
charset = utf-8# JSON 文件使用 UTF-8 编码
[*.json]
charset = utf-8# YAML 文件(Unity 场景和预制件)使用 UTF-8 编码
[*.yaml]
charset = utf-8# Shader 文件使用 UTF-8 编码
[*.shader]
charset = utf-8# 文本文件和其他文件使用 UTF-8 编码
[*.txt]
charset = utf-8###############################
# 缩进和空格规则
################################ C# 文件使用 4 个空格缩进
[*.cs]
indent_style = space
indent_size = 4# JSON 文件使用 2 个空格缩进
[*.json]
indent_style = space
indent_size = 2# YAML 文件使用 2 个空格缩进
[*.yaml]
indent_style = space
indent_size = 2# Shader 文件使用 4 个空格缩进
[*.shader]
indent_style = space
indent_size = 4# 文本文件使用 4 个空格缩进
[*.txt]
indent_style = space
indent_size = 4###############################
# 行尾规则
################################ 确保所有文件以换行符结尾
[*]
insert_final_newline = true# 统一使用 LF 换行符(适用于跨平台项目)
[*]
end_of_line = lf###############################
# 其他规则
################################ 删除行尾的多余空格
[*]
trim_trailing_whitespace = true

        重点是[*.cs] charset = utf-8这句话,其他的别的配置,根据个人需要删改,感兴趣可以搜索这个规范研究一下,这样会强制改变的.cs文件编码为utf8 无BOM(这个格式是最通用的格式,Unity也使用这个格式).文件处理好之后保存重启Unity和编辑器就OK了.

注意

        创建一个脚本用VS打开后,初始右下角还会显示GB2312,修改脚本内容并保存后自动会变为utf8,这就是editorconfig发挥了作用.

        和刚才一样这个文件需要有一点中文,然后点保存,才能成功被改变,如果不存在中文,当再创建一个脚本编译之后,刚才改成utf8的脚本又变回GB2312.当然如果脚本里面没中文,假设另一个人使用rider打开了这个脚本,即便rider默认使用utf8读取,也不会出现任何问题.

        最后不会修改没改变的脚本,即如果你导入一些国标脚本如果你没改动过它,也不会被自动改变格式.

 

.editorconfig介绍(选读)

        .editorconfig 是一个用于定义和维护项目中代码风格、文件格式和编码规则的配置文件。它主要用于确保开发团队在不同的编辑器和 IDE(集成开发环境)中能够保持一致的编码风格和文件格式,避免因个人习惯或不同开发工具的默认设置而产生的格式问题。

        .editorconfig 文件是一种简单的文本文件,通常放置在项目的根目录中。多个编辑器和 IDE,如 Visual Studio、Rider、VS Code 等,都支持读取并自动应用 .editorconfig 文件中的配置规则。

1 .editorconfig 的作用

统一代码风格:通过 .editorconfig,团队可以规定缩进、行尾符号、文件编码、命名规则等,确保所有开发人员使用统一的代码风格。

跨编辑器一致性:不同编辑器和 IDE 可能有不同的默认设置,.editorconfig 帮助跨平台、跨工具的团队在不同的开发环境中保持一致的格式。

代码质量提升:通过规定代码的格式规则,可以减少因代码风格不一致导致的代码冲突和审查意见,提高代码质量。

2 .editorconfig 文件的基本结构

        一个 .editorconfig 文件包含多个部分,每个部分控制特定类型文件的格式和编码规则。文件的结构是按键值对方式编写的,通常包含:

 

文件类型定义:使用文件路径或扩展名来定义针对哪些文件应用特定规则。

格式规则:定义缩进样式、空格、换行符、最大行长度等。

编码规则:定义文件的字符编码类型(如 UTF-8)。

        

# 这是顶级的 EditorConfig 文件,表示它是项目的根配置
root = true# 针对所有 C# 文件的配置
[*.cs]
charset = utf-8            # 使用 UTF-8 编码
indent_style = space        # 使用空格进行缩进
indent_size = 4             # 缩进为 4 个空格
end_of_line = lf            # 使用 LF(换行符)作为行尾
insert_final_newline = true # 文件末尾插入换行符
trim_trailing_whitespace = true # 自动移除行尾的多余空格# 针对 JSON 文件的配置
[*.json]
indent_style = space
indent_size = 2             # JSON 文件使用 2 个空格缩进# 针对 YAML 文件的配置
[*.yaml]
indent_style = space
indent_size = 2             # YAML 文件使用 2 个空格缩进# 针对 Markdown 文件的配置
[*.md]
max_line_length = off       # 对 Markdown 文件不限制行长度
trim_trailing_whitespace = false # 保留行尾空格

关键配置项说明

root:如果设置为 true,表示这是项目的顶级 .editorconfig 文件,后续子目录中的 .editorconfig 不会覆盖它。

 

文件类型选择器:

 

[*.cs]:匹配所有 .cs 文件。

[*.json]:匹配所有 .json 文件。

[src/**/*.cs]:匹配 src 目录下的所有 .cs 文件。

缩进规则:

 

indent_style:指定缩进使用空格还是 Tab。可选值:space 或 tab。

indent_size:指定缩进的大小(空格的数量)。

行尾规则:

 

end_of_line:指定行尾符号,常用值为 lf(Unix 风格换行符)或 crlf(Windows 风格换行符)。

insert_final_newline:是否在文件末尾强制添加一个换行符。

trim_trailing_whitespace:是否自动去除行尾的多余空格。

编码规则:

 

charset:指定文件的编码格式,常见的值有:

utf-8:无 BOM 的 UTF-8 编码。

utf-8-bom:带 BOM 的 UTF-8 编码。

utf-16be 或 utf-16le:UTF-16 编码。

latin1:Latin-1 编码。

最大行长度:

 

max_line_length:指定每行的最大字符长度,超出长度时可能会自动换行或提示。可以将其设置为 off,表示不限制行长度。

 

 

UTF8介绍(选读)

        UTF-8 是一种字符编码方式,用于表示 Unicode 字符。虽然 UTF-8 本身是一种编码,但它可以带有或不带有 BOM(字节顺序标记,Byte Order Mark),这导致我们通常会遇到两种主要的 UTF-8 变体:

1. UTF-8 without BOM(不带 BOM 的 UTF-8)

        这是标准的 UTF-8 编码,不包含 BOM 字节(即文件开头没有额外的 EF BB BF 字节)。

        BOM 是可选的,因此大多数现代工具和系统(包括网络协议、编程语言、操作系统)都默认使用 UTF-8 without BOM。

                 Unity 默认使用的是 UTF-8 without BOM,即不带 BOM 的 UTF-8 编码。这种编码方式在大多数场景下都是最佳选择,因为它避免了 BOM 可能带来的兼容性问题,特别是在处理跨平台文件或脚本时。

2. UTF-8 with BOM(带 BOM 的 UTF-8)

        这种编码方式在文件开头包含三个字节 EF BB BF,用于指示文件是以 UTF-8 编码的。这种标记的初衷是为了帮助某些系统(特别是 Windows 系统)识别文件的编码格式。

        尽管 BOM 可以帮助识别编码,但它通常会导致某些问题,特别是在跨平台应用或网络传输时,因为 BOM 会被解析为实际字符,从而导致错误。

 

如何确认和设置 Unity 文件编码为 UTF-8 without BOM

编辑器设置:

        Unity 默认会在其生成的文件(如脚本文件、文本文件等)中使用 UTF-8 without BOM,而且它的导入导出操作也依赖这种编码格式。

使用外部编辑器(如 Visual Studio、Rider 等)检查文件编码:

        打开文件时,可以通过状态栏或高级保存选项检查文件的编码格式,确保使用的是 UTF-8 without BOM。

        如果文件编码不符合预期,可以通过 高级保存选项 将文件转换为 UTF-8 without BOM(这里还是推荐我刚才讲的插件,配置起来很麻烦,感兴趣自行搜索)。

 

 

 

相关文章:

在Unity环境中使用UTF-8编码

为什么要讨论这个问题 为了避免乱码和更好的跨平台 我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本…...

零工市场小程序:自由职业者的日常工具

零工市场小程序多功能且便捷,提供了前所未有的灵活性和工作效率。这类小程序不仅改变了自由职业者的工作方式,也重塑了劳动力市场的格局。 一、零工市场小程序的特点 即时匹配:利用先进的数据算法,零工市场小程序能够快速匹配自由…...

【Http 每日一问,访问服务端的鉴权Token放在header还是cookie更合适?】

结论先行: token静态的,不变的,放在header里面。 典型场景 ,每次访问时需要带个静态token请求服务端,向服务端表明是谁请求,此时token也可以认为是个固定的access-key。token动态的,会失效&…...

vue2+ueditor集成秀米编辑器

一、百度富文本编辑器 1.首先下载 百度富文本编辑器 下载地址:GitHub - fex-team/ueditor: rich text 富文本编辑器 2.把下载好的文件整理好 放在图片目录下 3. 安装插件vue-ueditor-wrap npm install vue-ueditor-wrap 4.在你所需要展示的页面 引入vue-uedito…...

[网络]HTTP协议 Cookie与Session

一、Cookie 1.1 定义 HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到 用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常,它用于…...

安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景

随着科技的不断进步,增强现实(AR)技术逐渐在多个领域展现出其独特的优势,尤其是在安保和安防方面。AR眼镜凭借其先进的功能,在机场、车站、海关、港口、工厂、园区、消防局和警察局等行业中为安保人员提供了更为高效、…...

2024 第十二届重庆国际植保双交会暨新型肥料农药产业博览会

2024 第十二届重庆国际植保双交会暨新型肥料农药产业博览会,引领农业新未来 农业,是人类生存的基石,是社会发展的保障。而肥料和农药,作为农业生产的重要投入品,其品质和技术的不断创新,直接关系着农业的可…...

用“说”智能控制灯具开关语音识别芯片NRK3603

用“说”智能控制灯具开关是一种基于语音识别技术的智能家居设备,它通过内置的语音识别芯片,利用离线识别算法,将用户的语音指令实现对灯具的控制,NRK3603语音识别芯片成为客户低成本的离线语音识别方案。 功能特性: …...

APS开源源码解读: 排程工具 optaplanner

抽象层次非常好,广义优化工具。用于排产没有复杂的落地示例 https://github.com/apache/incubator-kie-optaplanner/blob/main/optaplanner-examples/src/main/java/org/optaplanner/examples/projectjobscheduling/app/ProjectJobSchedulingApp.javahttps://github…...

AMEYA360:村田量产用于汽车市场的高可靠性0603M铜电极负温度系数NTC热敏电阻

株式会社村田制作所开发了0603M尺寸(0.60.30.3mm)铜电极负温度系数(NTC)热敏电阻,型号分别是“NCU03XH103F6SRL”和“NCU03XH103F60RL”,该新品扩充了NCU系列的产品尺寸阵容,满足了汽车市场应用中电路板的高密度化和小型化、以及对电子部件的…...

代码随想录第十天|150.逆波兰表达式求值 239.滑动窗口的最大值 347.前K个高频元素

150.逆波兰表达式求解 思路:做过 使用stoi :字符串转数字 class Solution { public:int cal(int num1,int num2,char c){int res;if(c){resnum1num2;}if(c-){resnum2-num1;}if(c*){resnum1*num2;}if(c/){resnum2/num1;}return res;}int evalRPN(vector…...

[阅读笔记]《解读基金—我的投资观与实践》— 季凯帆

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…...

2.3之前

1. 2. freertos基础时钟:freertos自动的采用systick定时器,作为freertos基础时钟,systick定时器只有定时中断功能,1ms中断一次。...

处理器基础知识——cache

本文节选自书籍《大话处理器:处理器基础知识读本》 PDF版本可以访问我的网盘通过网盘分享的文件:大话处理器:处理器基础知识读本.pdf 提取码: 1234 0 什么是 Cache 随处可见的Cache–技术来源于生活 使用电脑的人对 Cachc 并不会陌生&#…...

操作系统的运行环境

1.处理器的运行模式 目态 也叫用户态, 执行非特权指令:不能直接访问系统中的软硬件资源,仅仅可以访问用户地址空间。 用户应用程序运行在目态。 管态 也叫内核态, 可执行除访管指令外的任意指令,包括特权指令&…...

如何在 Selenium 中获取网络调用请求?

引言 捕获网络请求对于理解网站的工作方式以及传输的数据至关重要。Selenium 作为一种 Web 自动化工具,可以用于捕获网络请求。本文将讨论如何使用 Selenium 在 Java 中捕获网络请求并从网站检索数据。 我们可以使用浏览器开发者工具轻松捕获网络请求或日志。大多数现代 Web…...

IP学习——oneday

1.什么是网络?为什么需要网络? 空间,时间;传统的邮件传输要考虑到距离,网络解决了空间距离(太远)、解决了时间问题(旧音乐等) 云:面向客户的虚拟化服务 运营商公司主营…...

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 完整论文+代码+数据结果链接在文末! 一、第一问 问题描述:假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于 2023 年保持稳定,每季种植的农作物在当季销售。如果某种作物每…...

软件工程知识点总结(1):软件工程概述

1 什么是软件? 定义:计算机系统中的程序及其文档。 ——程序是计算机任务的处理对象和处理规模的描述; ——文档是为了便于了解程序所需要的阐明性资料。 2 软件的特点? 软件是无形的,不可见的逻辑实体 ——它的正确与…...

热烈庆祝中国科学技术大学建校六六周年

卡西莫多的诗文集2022-2024.9月6-校庆国庆专版 欢迎分享 通过网盘分享的文件:卡西莫多的诗文集2022-2024.9月6-A5-校庆国庆专版.pdf 链接: 百度网盘 请输入提取码 提取码: umpm...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...