排除utf-8字串中的特殊字符

今天遇到了字串相关Bug,大概描述一下,就是在导入Fbx的时候,字符串中有特殊字符(PS,如'?',')' )等字符,导入的时候,若是按照原字符名称会出现问题。html

 

问题主要体如今两个方面:编辑器

1.引擎和编辑器自己是作字符串压缩的,工程的长路径,在引擎中会用"asset:"标志,而fbx中有":"会影响编辑器的字串处理,致使面板不响应。编码

2.若是用原字符串建立文件,可能致使文件建立失败,好比 AABB?.mesh,在fopen的时候文件名有操做系统不容许的字符致使建立失败。最后致使fbx不能完整的导出。spa

 

问题的解决方案:操作系统

问设计师,最后商量的解决方案,是把ASCII码中的特殊字符(128个中除去字母,数字和'_'的)转换为下划线,超出ASCII码127,则不处理。由于是UTF8编码,第一个字节设计

超出0x1000则表示是多字节码(2-4),多字节码有多是中文或者日文等别国语言。code

因此就引出了一个问题,如何判断UTF是不是ASCII码仍是多国语言码?htm

 

在下面的Po主的文章中找到了答案,里面说的很详细,了解了这个,解决的引出的问题就很简单了。blog

http://blackdire.blog.sohu.com/181309341.htmlip

 

拓展阅读:

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

 

Tips(CS学科确定都知道就略过吧):

std::string内存中看到的数值为负的,是负数的补码.

补码 = 原码取反 + 1

原码 = (补码 -1)取反。

相关文章
相关标签/搜索