我试图找出创建一个等同于String.Replace("oldValue","newValue");
的函数的最佳方法
可以处理代理对。
我担心的是,如果字符串中有代理项对,并且字符串可能与代理项对的一部分相匹配,那么它可能会分割代理项并且数据已损坏。
所以我的高级问题是:对于Unicode和代理对,String.Replace(string oldValue, string newValue);
是安全的操作吗?
如果没有,那么最好的前进道路是什么?我熟悉StringInfo类,可以将这些字符串拆分为元素等。我只是不确定在为新旧值传递字符串时如何进行替换。
感谢您的帮助!
答案 0 :(得分:2)
这是安全的,因为.NET中的字符串是内部UTF-16。 Unicode代码点可以用一个或两个UTF-16代码单元表示,而.NET char
就是这样一个代码单元。
当代码点由两个单位表示时,第一个单位称为高代理,第二个单位称为低代理。在这个问题的背景下重要的是代理单位属于特定范围,U + D800 - U + DFFF。此范围仅使用 来表示代理项对,此范围内的单个单位没有意义且无效。
因此,在另一个有效的utf-16字符串中,不可能有一个有效的utf-16字符串与代理对的“part”相匹配。
请注意,.NET字符串也可以表示无效的utf-16字符串。如果Replace
的任何参数无效 - 那么它确实可以拆分代理对。但是 - 垃圾输入,垃圾输出,所以在特定情况下我不认为这是一个问题。