今天遇到了字串相关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)取反。