我试图找出创建一个等效于String.Replace("oldValue","newValue"); 可以处理代理对的函数的最佳方法。我担心的是,如果字符串中存在代理对,并且字符串可能与代理对的一部分匹配,则可能会拆分代理并损坏数据。因此,我的高层次的问题是:是String.Replace(string oldValue, string newValue);一个安全的操作,当涉及到Unicode和代理对?如果没有,那么前进的最佳途径是什么?我熟悉StringInfo类,该类可以将这些字符串拆分为元素等。我只是不确定在传递旧值和新值的字符串时如何进行替换。
1 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
这是安全的,因为.NET中的字符串在内部为UTF-16。Unicode代码点可以由一个或两个UTF-16代码单元表示,.NETchar
就是这样的代码单元之一。
当代码点由两个单位表示时,第一个单位称为高代理,第二个单位称为低代理。在此问题中,重要的是代理单位属于特定范围U + D800-U + DFFF。此范围仅用于表示代理对,此范围中的单个单位没有意义并且无效。
因此,不可能在另一个有效的utf-16字符串中具有与代理对的“部分”匹配的有效的utf-16字符串。
请注意,.NET字符串也可以表示无效的utf-16字符串。如果的任何参数Replace
无效-那么它确实可以拆分代理对。但是-乱扔垃圾,乱扔垃圾,因此在给定的情况下,我不认为这是一个问题。
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消