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

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

 

问题主要体现在两个方面:

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

2.如果用原字符串创建文件,可能导致文件创建失败,比如 AABB?.mesh,在fopen的时候文件名有操作系统不允许的字符导致创建失败。最后导致fbx不能完整的导出。

 

问题的解决方案:

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

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

所以就引出了一个问题,如何判断UTF是否是ASCII码还是多国语言码?

 

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

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

 

拓展阅读:

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

 

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

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

补码 = 原码取反 + 1

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

posted @ 2014-04-24 18:11  singmelody  阅读(1111)  评论(0编辑  收藏  举报