К сожалению, ISO 646 не предоставляет единого определения для каждого символа. Он представляет 7-битные символы ASCII, и в наборе символов есть определенные диапазоны, которые определяются с использованием специфичных для региона вариантов. См. на странице Википедии ISO 6464 для получения дополнительной информации.
В результате, вероятно, нет конкретного способа обрабатывать это в общем, чтобы он работал правильно в любом регионе. Я не знаком со стандартами карт, но было бы интересно узнать, есть ли в данных карты конкретные байты, указывающие, какой вариант применить. Другими словами, есть ли какая-то информация, которую вы можете прочитать, которая скажет вам, применять ли английский, немецкий, датский или какой-либо другой вариант?
Как только вы знаете, какой вариант применить, вам лучше всего искать библиотеки C, которые поддерживают преобразование этих данных в ISO 8859-1. Получив данные в формате ISO-8859-1 (или аналогичном), вы можете преобразовать их в строку NSString с помощью kCFStringEncodingISOLatin1.
Я не уверен, есть ли какие-либо библиотеки преобразования ISO-646 в ISO-8859-1, доступные на iOS. Наиболее распространенные библиотеки C, которые я видел там для такого рода вещей, - это библиотека libiconv GNU, но я не думаю, что есть конкретное преобразование для вашего случая, поддерживаемое на iOS. Если дело доходит до этого, не должно быть слишком сложно вручную преобразовывать байты с помощью таблиц преобразования, показанных на этой странице man . Как видите, для любого конкретного варианта требуется преобразовать лишь небольшое количество символов.