2017-02-06 15 views
0

Я пытаюсь проверить мою программу декодирования Unicode 32, которую мне пришлось писать для занятия в школе. Я ищу решение, которое будет точно записывать 32 байта UTF в файл, чтобы я мог их декодировать.кодировать значение для UTF 32

Я пытался разработать способ протестировать его без необходимости программирования кодировщика Unicode для UTF32 (что означает, что мне пришлось бы затем тестировать THAT). Я использую программу, которую я нашел в Интернете под названием editpad (https://www.editpadlite.com/), которая позволила бы мне кодировать в utf32 .., после чего я мог бы проверить свою программу.

Однако, я хотел бы попробовать, кодирующая U + 2A580 (юникод элемент кода) в этой программе, а затем использовать команду терминала в Linux

od -tx1 file.txt 

для его просмотра, и будет видеть результат как:

00 00 fe ff 00 00 d8 69 00 00 dd 80 

Который, за исключением спецификации, не имеет для меня никакого смысла. Я просто неправильно понимаю UTF32? Или есть ошибка .. Я бы ожидал, что значение UTF32 будет чем-то вроде 02 a5 80

EDIT: моя операционная система - это Linux, Fedora специально. Fedora Release 24

+0

Не могли бы вы изменить свою операционную систему на вопрос? – Paulb

+0

Это должна быть проблема с программированием, учитывая, что вы запрашиваете переполнение стека, поэтому код в вашей программе, который выполняет преобразование, является релевантным и все же опускается. – tadman

+0

@tadman понял, что это связано с программированием .. мой код в этом случае, не имеет значения, поскольку я спрашиваю о том, как лучше проверить его. –

ответ

0

Вы правы, что Unicode элемент кода U+2A580 кодируется как следующая последовательность байтов в кодировке UTF-32BE:

00 02 A5 80

То, что вы на самом деле видим произойдет это элемент кода кодируемого в UTF-16 сначала, а затем два UTF-16 суррогатного кода (0xD869, 0xDD80) кодируются индивидуально в UTF-32BE.

Еще одним признаком этого происходит первая последовательность байт:

00 00 FE FF

В то время, что является UTF-32BE спецификации, это также UTF-16BE спецификации кодируется в UTF-32BE ,

Так, как:

  • EditPad ошибочно делают двойное кодирование.
  • EditPad сохраняет в UTF-16, несмотря на то, что вы сообщаете сохранить его в UTF-32, а затем ваш вывод od искажает вход UTF-16 как UTF-32.