Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;-转义特殊字符_C++_String_Escaping - Fatal编程技术网

C++ c++;-转义特殊字符

C++ c++;-转义特殊字符,c++,string,escaping,C++,String,Escaping,我需要转义所有特殊字符,替换国家字符,并为表名获取“纯文本” string getTableName(string name) 我的字符串可以是“šrka65%&。”,我想得到可以在数据库中用作表名的字符串。哪个DBMS string getTableName(string name) 在标准SQL中,用双引号括起来的名称是带分隔符的标识符,可以包含任何字符 在MS SQL Server中,方括号中的名称是分隔标识符 在MySQL中,包含在后面记号中的名称是删除的标识符 您可以简单地选择

我需要转义所有特殊字符,替换国家字符,并为表名获取“纯文本”

string getTableName(string name)
我的字符串可以是“šrka65%&。”,我想得到可以在数据库中用作表名的字符串。

哪个DBMS

string getTableName(string name)
  • 在标准SQL中,用双引号括起来的名称是带分隔符的标识符,可以包含任何字符
  • 在MS SQL Server中,方括号中的名称是分隔标识符
  • 在MySQL中,包含在后面记号中的名称是删除的标识符
您可以简单地选择将名称括在适当的标记中

我觉得那不是你想要的

你的字符串是什么代码集?当它进入我的浏览器时,它似乎是UTF-8。您是否需要能够明确地反转映射?这更难

您可以使用多种方案来映射信息:

  • 一个简单的方法是简单地对所有内容进行十六进制编码,使用标记(X)防止前导数字:

    XC5A1C3A1726B6136355F25262E
    
  • 一个稍微不那么简单的是十六进制编码任何不是ASCII字母数字或下划线的东西

    XC5A1C3A1rka65_25262E
    
  • 或者,正如一条评论所建议的,您可以为重音拉丁字母设计一个映射表——实际上,一个适当初始化的映射表将是最快的方法。输入是源字符串中的字符;输出是所需的一个或多个映射字符。如果使用8位字符集,这是完全可以管理的。如果您使用完整的Unicode,那么它的可管理性要低得多(尤其是,如何将所有的汉语音节映射为ASCII?)

  • 或者


…您的数据库有哪些特殊字符?标准SQL?是否与标准有任何变化或扩展?您正在使用现有的数据库访问库吗?如果是,是哪一个?哪一个是您的数据库,字符串的编码是什么,如何定义纯文本?你能提供更多的细节吗?Unicode是20年前为了解决这个问题而发明的。您的操作系统是Unicode,数据库引擎是Unicode,数据库中的数据可能是Unicode。唯一的问题是你的程序不是。使用wstring.mysql、mssql、oracle-我无法专注于一个特定的数据库。我希望删除所有特殊字符,并替换“š”->“s”、“č”->“c”等。@Meloun:删除重音符号很方便,但可以使用映射表。你想用标点符号和控制字符做什么?