Хотите сформировать строку с заданными значениями шестнадцатеричного кода

2

Я хочу заменить определенные символы во входной строке другими символами.

Текст ввода содержит левые и правые интеллектуальные кавычки Microsoft, которые я хотел бы преобразовать в один ".

Я планировал использовать операцию Replace, но мне трудно создать текстовую строку для поиска.

Я бы хотел заменить входную последовательность (в шестнадцатеричном формате)\xE2809C и изменить эту последовательность только на один ". То же самое с \xE2809D.

Как создать строку для использования в операции Replace?

Я думаю о чем-то вроде (в цикле):

tempTxt = tempTxt.Replace(charsToRemove[i], charsToSubstitute[i]);

но мне не удается создать массив charsToRemove.

Может быть, вопрос большой: может ли весь входной файл считываться и преобразовываться в обычный ASCII, используя некоторые чтения/записи и преобразования строк в С#.

Спасибо, Майк

Теги:
string
hex
replace

3 ответа

1
Лучший ответ

Что-то вроде этого?

char [] charsToRemove = {
    '\u201C', // These are the Unicode code points (not the UTF representation)
    '\u201D'
};

char [] charsToSubstitute = {
    '"',
    '"'
};
  • 0
    Фактические шестнадцатеричные значения в моем входе - E2809C. Они могут не соответствовать умным кавычкам, но они соответствуют какой-то двойной кавычке, отображаемой в Word. Я был в состоянии удалить кавычки 201C и 201D, но E2809C и E2809D. Предложения? Еще раз спасибо, Майк
  • 0
    Не могли бы вы показать часть кода, где вы читаете файл?
Показать ещё 4 комментария
0

Я использую ReqPro40.dll для чтения данных. Данные хранятся в виде текста. Надеюсь, я не потерял слишком много для копирования/вставки ниже. Ниже приведено все, что мне известно. Но я хочу избавиться от более длинных последовательностей плохих персонажей. E2809C должен стать цитатой, но у меня проблемы с этим.

string tempTxt = Req.get_Tag(ReqPro40.enumTagFormat.eTagFormat_ReqNameOrReqText);
tempTxt=tempTxt.Substring(1, tempTxt.Length-1);

char[] charsToRemoveForXMLLegality = new char[]
{ '\x000a', '\x000b', '\x0002', '\x001e', // NL, VT, STX, RS
  '\x0034', '\x8220', '\x8221',           // ", left double, right double quote
  '\x8216', '\x8217',                     // left single quote, right single quote
  'x8211', '\x8212',                     // en-dash, em-dash
  '\x0188', '\x0177',                     // 1/4 fraction, plus/minus
  '\x8230', '\x0160'                      // ellipsis, non-breaking space
};   
string[] charsToSubstituteForXMLLegality = new string[]
        { " ", " ", "", "-",
          "\"", "\"", "\"",
          "\'", "\'",
          "-", "-",
          "1/4", "+/-",
          "...", " "
       };

for (int i = 0; i < charsToRemoveForXMLLegality.Length; i++)
{
    tempTxt = tempTxt.Replace(charsToRemoveForXMLLegality[i].ToString(), charsToSubstituteForXMLLegality[i]);
}
  • 0
    Некоторый текст: Progress… €. </ Require-text> должен быть Progress ... ". </ Require-text> Шестнадцатеричные значения: 50 72 6F 67 72 65 73 73 E2 80 A6 E2 80 9D 2E 3C 2F 72 65 71 75 69 72 65
  • 0
    Не берите в голову, если бы я мог сказать различие между шестнадцатеричным и десятичным, это работало бы !! Извините за беспокойство.
0

Возможно, вы захотите дать Regex выстрел. Вот пример, который заменит текст с интеллектуальным цитированием на сингл ".

string tempTxt = "I am going to "test" this.  "Hope" it works";
string formattedText = Regex.Replace(tempTxt, "s/"|"|"|"/", @"""");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню