Как работать со специальными символами при использовании API доставки UPS

Я пытаюсь распечатать этикетки для международных отправлений с помощью 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

Есть ли предложения?

«*Я не уверен, что измененные слова по-прежнему имеют то же значение на испанском языке.*» Я уверен, что нет.

Poul Bak 15.03.2024 21:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, связана ли это с 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!

SyndRain 21.03.2024 15:14

Приятно слышать! Я рад быть полезным.

Viliamm 21.03.2024 16:01

Спасибо! Да, как вы сказали, они сообщают, используя UTF-8, поэтому я даже не рассматривал возможность изменения другого набора символов.

SyndRain 21.03.2024 16:05

Другие вопросы по теме

Похожие вопросы

Serilog записывает в базу данных только в том случае, если таблица ранее не существовала
Как преобразовать запрос MongoDB с помощью «UnionWith» в C# MongoDB.Driver
«Ошибка: невозможно получить доступ к jar-файлу» в действиях GitHub при выполнении через .NET, но работает из командной строки
MudBlazor — MudDataGrid — FilterDefinitions по умолчанию не позволяет пользователю изменять базовые фильтры
Настройте метод на макете, который имеет параметр, который является выражением асинхронной функции
SmtpClient не работает в .NET Framework, но успешно работает в .NET Core
С# Ошибка при получении строки из таблицы данных, если она содержит смешанные символы - приветствуются любые советы или альтернативный маршрут
Как преобразовать временную метку сообщения Kafka в формат даты и времени на C#?
Проблема с GUID, подписанным Skus в API Microsoft Graph с SDK на C#
Типы асинхронного фонового выполнения кода в конечной точке REST API