在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后缀),记事本打开,粘贴下列内容.此文件放在unity的项目的根目录,或者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(这里还是推荐我刚才讲的插件,配置起来很麻烦,感兴趣自行搜索)。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419023.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码执行漏洞-Log4j2漏洞 vulhub CVE-2021-44228

步骤一:执行以下命令启动靶场环境并在浏览器访问!!! 查看端口 浏览器访问 可以发现 /solr/admin/cores?action 这⾥有个参数可以传,可以按照上⾯的原理 先构造⼀个请求传过去存在JNDI注⼊那么ldap服务端会执⾏我们传上去的payload JDNI项⽬地址 https://github.com…

git的使用和gdb工具

1.git的使用 首先现在gitee上新建一个仓库 然后复制克隆链接到本地仓库 在本地仓库中,我们可以用git status查看仓库状态 我们要提交代码就是要三步 git add 文件名 git commit -m "写提交的日志" git push 将代码上传到远端仓库 然后你就完成一次提…

uuid.js 使用

相关代码 import { NIL } from "uuid";/** 验证UUID* 为空 则返回 false* param uuid* returns {boolean}*/ export function MyUUIDValidate(uuid: any): boolean {if (typeof uuid "string" && uuid ! NIL) { //uuid ! NIL 判断是否是默认值00…

小白建立个人网站初步尝试

一、VScode 代码是在VScode上运行的&#xff0c;可以看作者另一篇文章&#xff1a;http://t.csdnimg.cn/mOmdF 二、代码基本框架 代码解释<!DOCTYPE html>声明为HTML5文档<html><head>头部元素&#xff0c;不显示在页面<meta charset"utf-8"…

直击智博会,supOS加快发展新质生产力,赋能全球工厂数字化转型

9月6日&#xff0c;第十四届智慧城市与智能经济博览会&#xff08;以下简称智博会&#xff09;开幕主题活动在宁波举办。本届智博会着重围绕“数字赋能新型工业化”主题&#xff0c;设置开幕活动、展览展示和前瞻研讨、产数合作、赛事赋能、开放活动等4大板块活动&#xff0c;旨…

windows 环境下搭建mysql cluster 集群详细步骤

1、环境准备 下载mysql集群版本&#xff0c;我这里下载的是mysql-cluster-8.0.39-winx64 https://dev.mysql.com/downloads/cluster/ 2、创建配置文件 mysql集群版本下载以后解压后目录如下&#xff0c;创建配置文件 config.ini(集群配置文件&#xff0c;my.ini mysql配置…

如何把自动获取的ip地址固定

在大多数网络环境中&#xff0c;‌设备通常会自动从DHCP服务器获取IP地址。‌这种动态分配IP的方式虽然灵活方便&#xff0c;‌但在某些特定场景下&#xff0c;‌我们可能需要将设备的IP地址固定下来&#xff0c;‌以确保网络连接的稳定性和可访问性。‌本文将详细介绍如何把自…

单GPU一分钟生成16K高清图像!新加坡国立发布LinFusion:无缝兼容Stable Diffusion插件

论文链接&#xff1a;https://arxiv.org/pdf/2409.02097 Git链接&#xff1a;https://lv-linfusion.github.io/ 亮点直击 本文研究了Mamba的非因果和归一化感知版本&#xff0c;并提出了一种新颖的线性注意力机制&#xff0c;解决了扩散模型在高分辨率视觉生成中的挑战。 本文…

oracle数据库安装和配置

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Oracle 数据库的安装和配置是一个较为复杂的过程&#xff0c;涉及多个步骤和配置项。以下将详细介绍如何在 Linux 和 Windows 系统中安装 Oracle 数据库并进行基础配置。 一、Oracle 数据库安装前的准备 …

如何使用微软的Copilot AI工具将Word文档转换为PowerPoint

Copilot 让你可以将 Word 文档转换为 PowerPoint 演示文稿&#xff0c;使你能够以最小的努力制作出有针对性的演示文稿。这个功能是微软AI工具包的一部分&#xff0c;对于那些曾经盯着空白幻灯片不知道从何开始的人来说&#xff0c;这是一个颠覆性的改变。要充分利用这个工具&a…

【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】

一、&#x1f468;‍&#x1f393;网站题目 旅游&#xff0c;当地特色&#xff0c;历史文化&#xff0c;特色小吃等网站的设计与制作。 二、✍️网站描述 &#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计&#x1f469;‍&#x1f393;…

Elasticsearch:无状态世界中的数据安全

作者&#xff1a;来自 Elastic Henning Andersen 在最近的博客文章中&#xff0c;我们宣布了支持 Elastic Cloud Serverless 产品的无状态架构。通过将持久性保证和复制卸载到对象存储&#xff08;例如 Amazon S3&#xff09;&#xff0c;我们获得了许多优势和简化。 从历史上…

QT6聊天室项目 网络通信实现逻辑分析

实现逻辑 模块话网络通信设计分析 NetClient类 功能&#xff1a;负责与服务器进行通信httpClient:处理HTTP请求websocketClient&#xff1a;处理WebSocket通信 HTTP请求封装 设计请求和服务器响应的接口设计函数测试网络连接性设计处理的函数处理HTTP请求&#xff08;后期实现…

【Linux】System V通信

目录 System V共享内存 共享内存数据结构 共享内存函数 共享内存的关联 共享内存的去关联 用共享内存实现serve&client通信 共享内存与管道进行对比 System V共享内存 管道通信本质是基于文件的&#xff0c;也就是说操作系统并没有为此做过多的设计工作&#xff0c;…

【网络安全】服务基础第二阶段——第二节:Linux系统管理基础----Linux统计,高阶命令

目录 一、Linux高阶命令 1.1 管道符的基本原理 1.2 重定向 1.2.1 输出重定向 1.2.2 输入重定向 1.2.3 wc命令基本用法 1.3 别名 1.3.1 which命令基本语法 1.3.2 alias命令基本语法 1.4 压缩归档tar 1.4.1 第一种&#xff1a;gzip压缩 1.4.2 第二种&#xff1a;bzip…

SpringBoot3 简单集成 Mybatis plus

SpringBoot3 集成 Mybatis plus 1、引入Mybatisplus的starter <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency>2、引入数据…

前端HTML基础笔记

HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用于创建网页的标准标记语言。它通过一系列的元素&#xff08;或称为标签&#xff09;来定义网页的结构和内容。HTML文档由一系列的元素组成&#xff0c;这些元素可以包含文本、图片、链…

LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用

在国家“3060”碳达峰碳中和的政策背景下&#xff0c;如何寻求经济-能源-环境的平衡有效发展是国家、省份、城市及园区等不同级别经济体的重要课题。根据国家政策、当地能源结构、能源技术发展水平以及相关碳排放指标制定合理有效的低碳能源发展规划需要以科学准确的能源环境发…

培训第九周(部署k8s基础环境)

一、前期系统环境准备 1、关闭防火墙与selinux [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink /etc/systemd/system/dbus-o…

机器学习-神经网络:循环神经网络(RNN)详解

引言 在当今人工智能(AI)和深度学习(DL)领域,循环神经网络(RNN)作为一种专门处理序列数据的模型,具有不可忽视的重要性。RNN 的设计目标是模拟和处理序列中的时间依赖关系,使其成为许多应用场景的理想选择,如自然语言处理(NLP)、时间序列预测和语音识别等。它不仅…