Один вопрос, который вам нужно знать, заключается в том, применяется ли ваше регулярное выражение к строке байтов или строке символов.(В perl есть явное различие, не слишком уверенное в VB - оно обычно контролируется тем, как вы читаете данные).Нижеприведенные два пункта не являются «правилами» как таковыми, более хорошая форма.
- Если вы работаете с байтами, вам следует использовать только escape-последовательности
\xXX
.(и XX может состоять только из 2 "цифр") - Если вы работаете с символами, вам следует использовать escape-последовательности
\uXXXX
(\ xXXXX - это то же самое в большинстве языков)
Глядя на свое некомментированное регулярное выражение, кажется, что вы смотрите на персонажей.Это означало бы, что файл уже должен быть в какой-то допустимой кодировке символов (возможно, в одной из UTF-8, UTF-16LE или cp1252).Таким образом, все, что делает это регулярное выражение, удаляет допустимые символы UTF-8, которые не разрешены согласно спецификации XML.http://www.w3.org/TR/xml/#charsets.Это должно быть хорошо.
Но если ваша строка представляет собой поток байтов, и вы пытаетесь убедиться, что это допустимый UTF-8, то это сложнее сделать с регулярным выражением.Кроме non-ascii, я не знаю как.
Еще один момент: не следует ли вам устанавливать глобальный атрибут вашего регулярного выражения перед заменой.Может ли это быть вашей проблемой?Это исправить первый случай, но не весь файл?