Я собираюсь показать свое полное незнание того, как работает кодирование и различные строковые форматы.
Я передаю строку компилятору (Microsoft, как это происходит и для их Flight Simulator).Строка передается как часть XML-документа, который используется в качестве источника для компилятора.Это создается с использованием стандартных строк NET.Мне не нужно было специально указывать какую-либо кодировку или настройку типа, поскольку XML - это просто текст.
Строка - это просто набор символов.Это пример того, который дает ошибку:
ARG, AFL, AMX, ACA, DAH, CCA, AEL, AGN, MAU, SEY, TSC, AZA, AAL, ANA, BBC, CPA, CAL, COA, CUB, DAL, UGX, ELY, ОАЭ, ERT, ETH, EEZ, GHA, IRA, JAL, NWA, KAL, KAC, LAN, LDI, MAS, MEA, PIA, QTR, RAM, RJA, SVA, SIA, SWR, ROT, THA, THY, AUI, UAL, США, ACA, TAR, UZB, IYE, QFA
Если я создаю строку с помощью моей управляемой программы на C #, проблем не возникает.Однако эта строка взята из программы на С ++, которая может создать скомпилированный файл, используя свой собственный компилятор, который не совместим с MS one
Компилятору MS не нравится строка.Выдает две ошибки:
ОШИБКА ВНУТРЕННЕГО КОМПИЛЕРА: # C2621: Не удалось преобразовать строку WChar!ОШИБКА ВНУТРЕННЕГО КОМПИЛЕРА: # C2029: Не удалось преобразовать значение атрибута из UNICODE!
К сожалению, нет никакой полезной документации с компилятором об его ошибках.Мы просто делаем лучшее из того, что видим!
Я видел другие ошибки этого типа, но они содержат скрытые символы и управляющие символы, которые я могу поймать и удалить.
В этом случае я посмотрел наСтрока как Char [] и не могла видеть ничего необычного.Только то, что я ожидал.Нет значений выше предела ascii 127 и никаких управляющих символов.
Я понимаю, что WChar - это то, что C ++ понимает (но я не понимаю), Unicode - это двухбайтовое представление символов, а ASCII - однобайтовый.представление.
Я хотел бы сделать две вещи: сначала идентифицировать строку, которая потерпит неудачу, если передается компилятору, и затем исправить строку.Я предполагаю, что компилятор ожидает ASCII.
EDIT
Я сказал неправду - фактически я использую кодирование.Я проверил код, который использовал для преобразования байтового массива в строку.
public static string Bytes2String(byte[] bytes, int start, int length) {
string temp = Encoding.Defaut.GetString(bytes, start, length);
}
Я понял, что по умолчанию может возникнуть проблема, но его изменение на ASCII не имеет значения.Я начинаю верить, что сообщение об ошибке не то, чем кажется.