Я пытаюсь распечатать этикетки для международных отправлений с помощью API доставки UPS. Ответ от API имеет кодировку Base64. Это то, что используется для декодирования ответа zpl в кодировке Base64.
string ZPL = Encoding.UTF8.GetString(Convert.FromBase64String(graphicImage));
Проблема в том, что часть информации о получателе содержит испанские символы, такие как é в слове «Хосе». В ответном коде ZPLII все эти символы будут заменены символами замены �, что сделает имя и адреса трудночитаемыми.
Я нашел решение для печати символов Юникода в ZPL, где я заменяю ^CI27на ^CI28, все ^FD на ^FH^FD, все ^FV на ^FH^FV. Однако, поскольку все испанские символы заменяются на �, я не могу настроить специальные символы для правильного сопоставления их с шестнадцатеричным кодом UTF8, например сопоставления é с _C3_A9.
Я подумываю заранее удалить все акценты, например заменить все é на e, но я не уверен, что измененные слова по-прежнему имеют то же значение на испанском языке.
Вот пример ответа ZPL до изменения:
^FO15,142^A0N,28,32^FVSHIP TO: ^FS
^FO61,166^A0N,28,32^FVJOS�^FS
^FO61,194^A0N,28,32^FV(123)456-9890^FS
^FO61,222^A0N,28,32^FVSomeAddress with �^FS
^FO61,251^A0N,28,32^FVAPT 1, D^FS
^FO61,279^A0N,45,44^FV12345 MONTERREY NL^FS
^FO61,324^A0N,45,44^FVCOUNTRY^FS
Есть ли предложения?





Я не уверен, связана ли это с ZPL. Мне кажется, это проблема с кодировкой входного файла. У меня была похожая проблема с символами словацкого языка. Вместо символов "ľ,š,č,ť,ž,ý,á,í,é,..." во всем файле были символы "��". Сам файл показывался как сохраненный в кодировке UTF-8, которая должна полностью поддерживать словацкие символы. Я попытался открыть этот файл в кодировке Windows 1250 (Центральноевропейская) - при этом были удалены все символы "�". Затем я сохранил файл с UTF-8, и проблема была устранена.
Поэтому я думаю, вам стоит попробовать немного поиграться с кодировкой входных символов и привести их в кодировку UTF-8. Возможно, они сообщают о символах UTF-8, как это было в моем случае, но просто для проверки работоспособности попробуйте снова открыть их в испанской кодировке (должно быть 1252) и сохраните их как UTF-8, чтобы посмотреть, изменится ли это что-нибудь.
Однако, чтобы напечатать эти символы с помощью ZPL, вам необходимо изменить набор символов в ZPL с помощью команды ^CI со значением 28 для кодировки Unicode UTF-8.
Попробуйте это в программе просмотра Labelary Online ZPL:
^CI28
^FO15,142^A0N,28,32^FVSHIP TO: ^FS
^FO61,166^A0N,28,32^FVJOSÉ áíéóúñü^FS
^FO61,194^A0N,28,32^FV(123)456-9890^FS
^FO61,222^A0N,28,32^FVSomeAddress with íéá^FS
^FO61,251^A0N,28,32^FVAPT 1, D^FS
^FO61,279^A0N,45,44^FV12345 MONTERREY NL^FS
^FO61,324^A0N,45,44^FVCOUNTRY^FS
Надеюсь, я помог вам. Хорошего дня :)
Извините за поздний ответ. Ты прав! Мне следует декодировать строку base64 в ISO-8859-1 вместо стандартной Encoding.UTF8.GetString(bytes), которую использовала моя библиотека. Тогда в ZPL мне нужно всего лишь заменить ^CI27 на ^CI28!
Приятно слышать! Я рад быть полезным.
Спасибо! Да, как вы сказали, они сообщают, используя UTF-8, поэтому я даже не рассматривал возможность изменения другого набора символов.
«*Я не уверен, что измененные слова по-прежнему имеют то же значение на испанском языке.*» Я уверен, что нет.