【MATLAB】字体美化和乱码

news/2024/7/3 12:25:41 标签: matlab, 开发语言, 美化, 编码, 乱码, utf-8

文章目录

前言

  最近打开MATLAB,又发现了一个问题:编辑器中的中文输入在命令行或者说终端输出竟然是乱码,然后赶紧翻阅了一下此前的博客以及未发出的草稿,虽然依稀记得好像遇到过,但仍然没有找到一个完整的总结。于是就有了这篇博客。

声明:以下内容均基于MATLAB 2019b这个版本

首先说说说字体美化

  这是一切的源头,依稀记得最早就是因为看不惯MATLAB丑陋的字体,于是想要美化一下,但无奈遇到了乱码的问题,这也是本文标题的由来。

乱码到底是怎么导致的?

  主要是两种原因:编码和字体。所谓编码,就是说软件以不符合原文本或文本文件的编码方式进行解析文字,从而导致乱码,一般是中文乱码;而所谓字体,即所使用的字体中不包含中文字体,从而导致中文乱码,因为有很多字体是只包含一种语言的。

1 字体导致的乱码

  对代码来说,个人更推荐的是Fira Code这个编程专用的字体,但是如果直接在MATLAB中将字体替换为Fira Code,那么原来包含中文的脚本文件将产生乱码,如下图所示。
在这里插入图片描述
这就是因为Fira Code这个字体中不包含中文的字体,所以无法显示中文字体。
  所以这里要使用的是混合字体,即将包含中文的字体和编程字体进行合并,这样当显示英文时,会优先使用编程字体;而显示中文时,则会使用能够显示中文的字体。
  常用的混合字体如下所示:

  • YaHei-Consolas-Hybrid
  • Yahei-Fira-Icon-Hybrid-Font

需要注意的是,如果安装好字体之后,在MATLAB设置中仍然找不到,可以尝试将字体的ttf文件放到MATLAB安装目录下,参考这个路径:

C:\Program Files (x86)\MATLAB_R2019b\sys\java\jre\win64\jre\lib\fonts
            ${Install_Dir_of_MATLAB}\sys\java\....

  如果想自己制作混合字体也有办法:一般是使用WFM,或者Font Creator这两个工具,也各自附上教程链接:

  • WFM
  • Font Creator

2 编码导致的乱码

  需要知道的是,截至R2019b这个版本,MATLAB文本文件采用的编码方式仍然是GBK,而不是使用最为广泛的UTF-8,即在MATLAB中新建一个文本文件,其编码方式就是GBK,且终端也是以GBK编码方式进行解析显示。
  这个问题其实如果一直使用的是MATLAB编辑器那其实没啥,但是之前尝试使用VS Code编辑器来码代码时还是发现了GBK的不便之处,所以建议还是将编码方式改成UTF-8。
  经过查找资料,发现网上目前关于MATLAB修改编码方式的方法主要是两种,其中一种是修改根目录下的一个配置文件,以强行修改编码方式别名的方式来“欺骗”MATLAB,从而实现编码方式的修改;另一种则是创建一个修改编码方式的函数文件,然后在软件中添加该文件,使得每次打开之前都会执行该文件,从而实现编码方式的修改。

  • 方式一:修改根目录bin文件夹下的lcdata.xml文件
    一般来说,如果根目录下没有同名文件,应该会有类似名称的文件,比如带个example, src等后缀,可以直接把改文件复制并改名为lcdata.xml,然后把文件中关于编码方式的部分给取消注释,并做一定修改:
    在这里插入图片描述
    在这里插入图片描述
  • 方式二:新建一个startup.m文件并在软件中添加路径
      需要注意的是这个文件夹可以不在软件根目录下,但要求名字必须为startup.m,理论上来说这个代码可以加入任意代码,比如如果是为了修改编码方式,可以加入以下代码:
    function startup
    feature('DefaultCharacterSet','UTF-8');
    set(0,'DefaultTextFontname','宋体')
    set(0,'DefaultAxesFontname','宋体')
    end
    
    然后在MATLAB中包含这个文件夹:
    在这里插入图片描述
    这样下一次启动MATLAB则会自动修改编码方式为UTF-8.

方式二其实涉及到一个函数:查看编码方式:feature('locale'),具体用法建议查看帮助文档,此外还有一个查看当前的编码方式,但执行速度较慢:slCharacterEncoding()

总结

  本文总结了在MATLAB中设置字体以及相应的可能需要修改编码方式的教程。个人认为对于字体有强迫症要求的用户来说还是很有帮助的。虽然不是很难,但还是有必要记录一下,防止之后自己忘记。


http://www.niftyadmin.cn/n/5061900.html

相关文章

Arm Cache学习资料大汇总

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CC…

[高等数学]同济版高等数学【第七版】上下册教材+习题全解PDF

laiyuan 「高等数学 第7版 同济大学」 https://www.aliyundrive.com/s/5fpFJb3asYk 提取码: 61ao 通过百度网盘分享的文件:同济版高数教材及… 链接:https://pan.baidu.com/s/1gyy-GMGjwguAjYijrpC8RA?pwdyhnr 提取码:yhnr 高等数学相关: The Ca…

大型项目开发设计文档规范

目录 一、 需求文档分析 二、 需求分析 1.交互层分析 2.功能需求分析 3.数据分析 4.兼容性分析 5.非功能性分析 三、 系统现状分析 1. 判断要开发的功能属于哪个模块,需要与哪几个模块联动? 2. 要开发的功能属于新接口开发,还是既有…

数据结构-----二叉排序树

目录 前言 1.什么是二叉排序树 2.如何构建二叉排序树 3.二叉排序树的操作 3.1定义节点储存方式 3.2插入节点操作 3.2创建二叉排序树 3.4遍历输出(中序遍历) 3.5数据查找操作 3.6获取最大值和最小值 3.7删除节点操作 3.8销毁二叉排序树 4.完…

【C语言数据结构】栈-链式存储(链栈)

栈-链式存储-链栈 代码实现 代码实现 #include<stdio.h> #include<stdlib.h> #include<stdbool.h>#define ElemType char//定义链栈结构体&#xff0c;并规定栈顶就是链头&#xff0c;一切操作只能在链头进行 typedef struct LNode {//定义数据&#xff0c;…

基本的五大排序算法

目录&#xff1a; 一&#xff0c;直接插入算法 二&#xff0c;希尔排序算法 三&#xff0c;选择排序 四&#xff0c;堆排序 五&#xff0c;冒泡排序算法 简介&#xff1a; 排序算法目前是我们最常用的算法之一&#xff0c;据研究表明&#xff0c;目前排序占用计算机CPU的时…

思维模型 冷热水效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。冷热水效应可以改变你90%的人际关系。对于技术人员的沟通大有助益。 1 冷热水效应的应用 1.1 生活中的冷热水效应 恋爱和恋爱关系&#xff1a;在恋爱关系中&#xff0c;一对情侣可能会经历…

第三章 软件架构

固件框架由如下所示的构建块组成,如上图所示。 隔离边界。分区接口。分区。分区清单。分区管理器。以下各小节详细描述了这些构建块。 3.1 隔离边界 该框架定义了两种类型的隔离边界。 1、逻辑隔离边界,可用于以下情况: (1)通过一个由 IMPLEMENTATION DEFINED 机制定义…