乱码文字 第1篇
折腾的时候发现libass是可以“召唤”电脑中的字体以达到一定程度上不乱码的作用的。然而有的字体即使电脑上有也是“召唤”不出来的,并且和原本指定的字体也有关。去libass的github上逛了逛,发现与电脑环境、电脑的语言偏好设置也有关(我理解为接近玄学hhh)
在个人的电脑上对上面那篇颜文字的特殊字符的文章中总结的所有特殊符号进行了测试,截取部分结果如下:
即使是“召唤”成功的那些,有时在颜文字中显示效果并不好,例如:(⦿_⦿)(B站也是将它显示为小眼睛的感觉hhh)
还有同一个字符在同等条件的两次实验中召唤出了不同的字体。更加让我相信这是玄学了(不是
第二列是用Arctime压的,同种字体和在ffmpeg下的效果不一样。
乱码文字 第2篇
为了更好的理解后面的实际应用,我们这里简单的介绍下UTF-8的编码实现方法。即UTF-8的物理存储和Unicode序号的转换关系。
具体每个字节的特征可见下表,其中“x”代表序号部分,把各个字节中的所有x部分拼接在一起就组成了在Unicode字库中的序号。如下图所示。
我们分别看三个从一个字节到三个字节的UTF-8编码例子:
细心的读者不难从以上的简单介绍中得出以下规律:
乱码文字 第3篇
作为一个弹幕爱好者,最近沉迷将弹幕文件转换为ass字幕文件然后压制成自带弹幕的视频。
同时作为一个烤肉人,制作字幕也一定会用到ass字幕文件,最后压制带字幕的视频。
然而最近这两件事情都遇上了一个共同的问题,那就是乱码。
乱码的起因有两个,一个是emoji(絵文字),一个是颜文字中的特殊符号。(YouTube Livechat转换的弹幕的话虽然没有emoji,但是有_:xx:_形式的表情码)
注:以下下所有图片均为使用ffmpeg压制的效果
乱码文字 第4篇
所谓Emoji就是一种在Unicode位于 \u1F601-\u1F64F 区段的字符。这个显然超过了目前常用的UTF-8字符集的编码范围 \u0000-\uFFFF。Emoji表情随着IOS的普及和微信的支持越来越常见。
下面就是几个常见的Emoji(IM聊天软件中经常会被用到):
那么Emoji字符表情会对我们平时的开发运维带来什么影响呢?
最常见的问题就在于将他存入MySQL数据库的时候。一般来说MySQL数据库的默认字符集都会配置成UTF-8(三字节),而utf8mb4在以后才被支持,也很少会有DBA主动将系统默认字符集改成utf8mb4。
那么问题就来了,当我们把一个需要4字节UTF-8编码才能表示的字符存入数据库的时候就会报错:ERROR 1366: Incorrect string value: '\xF0\x9D\x8C\x86' for column 。
如果认真阅读了上面的解释,那么这个报错也就不难看懂了:我们试图将一串Bytes插入到一列中,而这串Bytes的第一个字节是 \xF0 意味着这是一个四字节的UTF-8编码。但是当MySQL表和列字符集配置为UTF-8的时候是无法存储这样的字符的,所以报了错。
那么遇到这种情况我们如何解决呢?
有两种方式:
乱码文字 第5篇
看完上面两个概念解释,那么解释UTF-8和Unicode的关系就比较简单了。
Unicode就是上文中提到的编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。
随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。它几乎涵盖了各个国家语言可能出现的符号和文字,并将为他们编号。详见:Unicode百科介绍。
Unicode的编号从 0000 开始一直到10FFFF 共分为17个Plane,每个Plane中有65536个字符。而UTF-8则只实现了第一个Plane,可见UTF-8虽然是一个当今接受度最广的字符集编码,但是它并没有涵盖整个Unicode的字库,这也造成了它在某些场景下对于特殊字符的处理困难(下文会有提到)。
乱码文字 第6篇
①因为是强制性给所有特殊符号分别指定一个字体,所以一些修饰性符号.( • ̀ω•́ ) 显示会错位。
②颜文字使用的特殊符号实在太多太多了,我是根据这篇文章()里总结的特殊符号写的,然而实际使用中应该还是能发现不包括在内的符号,希望在将来的使用中慢慢完善吧!(毕竟被收录的字符越来越多,而颜文字也源源不断地被发明出来orz)
↑这个表中存在的既可以emoji也可以黑白的符号,在用emoji库解码时无论是黑白符号还是emoji都会被解为同一个所以都会被删除。于是根据我个人的喜好,通过强行替换的方式,仅保留了_☝_,_♥_,_✌_,_❤_,_♀_,_♂_,_❣_ 这7个。(我觉得有的符号黑白的不好看hhh)
④由于本人是真・小白(b站上的python 600集教程看到30集就看不下去了orz)肯定还存在各种各样其他的问题…
2.其他一些解决方法(?)
①用Arctime导出为Final Cut原声字幕序列(保留emoji&颜文字显示优秀)
注:这个方法仅针对普通的字幕ass文件,弹幕ass文件无法使用。因为一转换弹幕的那些移动参数就全没了。
效果:
自己烤肉做字幕想用emoji的话可以考虑这个方法。不过个人电脑比较烂,final cut然后再compressor导出一次能要老半天,并且文件好大orz
乱码文字 第7篇
最近沉迷催麦,想把一切都保存下来(怀疑自己有收集癖),于是发现了下载youtube直播评论的chat_downloader,然后又在b站发现了把直播评论转为弹幕的方法。但是看着这些乱码实在是不得劲。
emoji在网上搜了一圈,自己也实验了,目前ass(准确的来说是libass)貌似目前还是不支持的,只能找办法删掉。
youtube livechat中的emoji表情是以_:xxx:_的形式显示的,同理也是可以删掉的。
于是一开始没发现颜文字乱码问题的我,不知道是梁静茹还是大学里学的一点皮毛的JavaScript(现已全还给老师)带给我的勇气,作为一个电脑小白居然决定写个python解决这个问题…
于是乎开始在b站看python教程,结果600多集的教程看到30集就看不下去了orz 于是决定直接莽。(. 还有其他推荐的教程吗?当然这个教程我也会尽量努力看下去的orz)
一开始进行得还算顺利,因为感谢有emoji这个库()可以将所有的emoji转换成_:xx:_的形式,一个正则就可以非常容易地删除了。
然而接下来我发现有一部分的emoji存在emoji版本和黑白的特殊符号版本()
然而emoji库在解码的时候是无论是黑白的还是彩色的都会转为同一个码,所以也会被删除。
我最后决定只保留这几个_☝_,_♥_,_✌_,_❤_,_♀_,_♂_,_❣_ (只想到一个个再解回去这个办法orz 不想面对emoji庞大的unicode…)其余的个人觉得黑白的不好看就算了。不过这个方法无论原本是特殊符号还是emoji还是youtube的表情码都会被保留。
接下来我终于发现了颜文字乱码的问题…这下麻烦大了。也没找到合适的库,并且字符种类好多啊😭字体也好麻烦,即使是可以正常显示的字体,但作为颜文字可能效果不好…总之进行了一连串的实验的重复工作后,总算出来一个还算可以的效果。(虽然还存在各种各样的问题,.关于修饰性符号有哪位大神有建议吗?)
不知道还有没有像我一样搞麦搞到开始学习编程的朋友😂虽然可能太过简单都算不上是编程哈哈哈,不过自己制作一个自己实际能用上的东西确实还挺让人开心的~也希望自己能坚持把教程看下去…至少要看到开始讲python吧!前100集还在讲linux系统呢😂
(不知不觉搞企划搞其他什么的给自己搞出了不少技能,哪天再总结一些ffmpeg的东西吧。虽然都是网上的内容,但是想总结一下算是比较少见的?东西)
(刚突然想起无论是emoji还是颜文字都是日本人发明的诶…😂)