排除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)取反。

相關文章
相關標籤/搜索