2010-05-08 5 views
1

Моего приложения обычно recieves строки в следующем формате:
«Item $ 5,69»Как преобразовать строку с двойными высокими/широкими символами в обычную строку [VC++ 6]

Некоторых contants я всегда ожидал:
- ДЛИНА всегда 20 символов
- индекс начало текста всегда [5]
- и самое главное индекс DECIMAL по цене всегда [14]
для того, чтобы правильно определить эту строку я проверить все ожидаемые участники, перечисленные выше ....

Некоторые из моих клиентов уже начали посылать строку с Doube-High/сдвоенных значений (пара символов, которые представляют один читаемый символ), подобный следующему: «Item $ x80x90.x81x91x82x92»

Для тестирования я просто просматриваю строку по-символу, сравниваю char [i] и char [i + 1] и заменяю эти пары на свой единственный символ, когда совпадение найдено (работает нормально) следующим образом:

[Код]

for (int i=0; i < sData.length(); i++) 
{ 
    char ch = sData[i] & 0xFF; 
    char ch2 = sData[i+1] & 0xFF; 

    if (ch == '\x80' && ch2 == '\x90') 
     zData.replace("\x80\x90", "0"); 
    else if (ch == '\x81' && ch2 == '\x91') 
     zData.replace("\x81\x91", "1"); 
    else if (ch == '\x82' && ch2 == '\x92') 
     zData.replace("\x82\x92", "2"); 
    ... 
    ... 
    ... 
} 

[/ Code ]

Но результат-то вроде этого:
«Item $ 5,69»

Обратите внимание, как это уже не соответствует моим ожиданиям: длина теперь 17 (вместо 20) из-за 3-преобразования и десятичной теперь находится в индексе 13 (вместо 14) из-за преобразования «5» до десятичной точки.

В идеале я хотел бы преобразовать строку в обычный читаемый формат, сохраняя константы (длина, индекс текста, индекс десятичной) в одном и том же месте (так что остальная часть моего приложения будет повторно использоваться) ... или любое другое предложение (я в значительной степени застрял в этом) ... Существует ли STANDARD способ справиться с этими типами персонажей?

Любая помощь будет оценена, я застрял на это некоторое время теперь ...

Спасибо,

+0

поиск "конвертировать широкий символ на char". если вы найдете решение, отправьте его. если никто не найдет решение в течение нескольких дней, я попытаюсь что-то написать. –

+0

http://stackoverflow.com/questions/258050/how-to-convert-cstring-and-stdstring-stdwstring-to-each-other –

+0

Не будет использовать WideCharToMultiByte по-прежнему изменять константы (например, общий размер строки, местоположение десятичной и т. д.)? – Shaitan00

ответ

0

Вам нужно Unicode нормальная форма. This Page поможет вам, несмотря на то, что вы про VS8. NormalizeString API не зависит от используемой версии Visual Studio.

Смежные вопросы