2010-09-14 187 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?)。

  • 或者......