6 回答
任何存储和检索 Unicode 文本的系统都会改变这些特定字符的危险很小。
在文本传输过程中可以更改的主要字符是行尾标记。例如,以文本模式将文件从 Unix 系统 FTP 到 Windows 系统可能会替换 LINE FEED 字符以用于 CARRIAGE RETURN + LINE FEED 对。
在那之后,一些系统可能会对文本进行规范化。除非考虑到规范规范化(组合或分解),否则不应使用组合字符和带有变音符号的字符。Unicode 字符数据库包含有关在这些规范化方案下需要哪些转换的信息。
这总结了需要注意的最重要的事情,对于您列出的角色来说,这些都不是问题。
可能进行但不太可能进行的其他转换是大小写更改和兼容性规范化。为了避免这些,请远离字母或任何看起来像字母的东西。一些符号也在兼容性规范化中进行了转换,因此您应该检查 Unicode 字符数据库中的属性以确保确定。但是,任何系统都不太可能在没有明确表明它会这样做的情况下进行兼容性规范化。
在Unicode Code Charts中,规范规范化用“≡”表示,兼容性规范化用“≈”表示。
您可以采用与 URL 或 HTML 编码相同的方法,并将关键字符替换为字符序列。即&
变为&
.
虽然这会产生更多的字符,但由于这些序列的重复,它可以被非常有效地压缩。
好吧,UNICODE 是一个标准,所以只要涉及的每个人(代码、数据库等)都在使用 UNICODE,你就不应该有任何问题。
Unicode 集中有更稀有的字符。据我所知,只有 0x32 (空格)以下的字符具有特殊含义,任何应该保留在 NVARCHAR 数据列中的字符。
除非您有一个很好的规范,否则它永远不会是完全安全的,哪些字符可以和不能成为数据的一部分。
记住一些墨菲定律:
“任何可能出错的事情都会发生。”
“任何不会出错的事,无论如何都会出错。”
那些绝对不会使用的字符,最终可能会被使用。当它们存在时,应用程序肯定会失败。
您可以使用您喜欢的任何字符作为分隔符,如果您只对值进行转义,以保证该字符不会出现在其中。不久前我写了一个示例,表明您甚至可以使用像“a”这样的常见字符作为分隔符。
当然,转义值意味着某些字符将被表示为两个字符,但通常这仍然比使用多字符分隔符的开销要小。更重要的是,它是完全安全的。