2010-09-14 317 views
0

我需要轉義所有特殊字符並替換國家字符並獲取表格名稱的「純文本」。C++ - 轉義特殊字符

string getTableName(string name) 

我的字符串可以爲「šárka65_%&」。我想獲取字符串我可以在我的數據庫中使用作爲表名。

+0

...什麼字符是特殊到你的數據庫?標準SQL?標準的任何變化或擴展?您是否正在使用現有的數據庫訪問庫,以及是否使用了哪一個? – dmckee 2010-09-14 14:00:32

+0

哪一個是你的數據庫,你的字符串是什麼編碼,你如何定義**純文本**?你能否提供一些更多的細節。 – 2010-09-14 14:02:19

+2

Unicode是20年前發明的,可以解決這個問題。您的操作系統是Unicode,您的dbase引擎是Unicode,dbase中的數據可能是Unicode。唯一的問題是你的程序不是。使用wstring。 – 2010-09-14 14:05:17

回答

2

哪個DBMS?

  • 在標準SQL中,用雙引號括起來的名稱是分隔標識符,可以包含任何字符。
  • 在MS SQL Server中,括在方括號中的名稱是分隔標識符。
  • 在MySQL中,包含在反標記中的名稱是一個定界標識符。

您可以簡單地選擇將名稱放在適當的標記中。

我有一種感覺,這是不是你想要的...

什麼代碼集的字符串是嗎?它到達我的瀏覽器時似乎是UTF-8。你需要能夠明確地反轉映射嗎?這很難。

您可以使用許多方案來映射信息:

  • 一個頭腦簡單的一個是簡單地爲十六進制編碼的一切,用一個標記(X),以防止領先的數字:

    XC5A1C3A1726B6136355F25262E 
    
  • 一個稍微不簡單的思想是對任何不是ASCII字母數字或下劃線的東西進行十六進制編碼。

    XC5A1C3A1rka65_25262E 
    
  • ,或作爲意見建議,可以制定一個映射表重音拉丁文字 - 事實上,適當地初始化的映射表,將是最快的方法。輸入是源字符串中的字符;輸出是所需的映射字符或字符。如果使用8位字符集,則完全可以管理。如果你使用完整的Unicode,那麼管理起來就不那麼簡單了(特別是,你如何將漢字音節映射到ASCII?)。

  • 或者......