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