Преобразовать Ruby строку в utf-16be | Ruby Код эквивалента Python - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь отправить текст на бенгальском через SMS-шлюз. Однако обычно он не поддерживает бенгальский текст. В их документации говорится, что мне нужно преобразовать строку SMS в utf-16be; без каких-либо других подробностей. Однако я нашел Python реализацию того, что ищу здесь .

>>> message = 'আমার সোনার বাংলা'
>>> message
'আমার সোনার বাংলা'

>>> message.encode('utf-16-be')
b'\t\x86\t\xae\t\xbe\t\xb0\x00 \t\xb8\t\xcb\t\xa8\t\xbe\t\xb0\x00 \t\xac\t\xbe\t\x82\t\xb2\t\xbe'

>>> message.encode('utf-16-be').hex()
'098609ae09be09b0002009b809cb09a809be09b0002009ac09be098209b209be'

>>> message.encode('utf-16-be').hex().upper()
'098609AE09BE09B0002009B809CB09A809BE09B0002009AC09BE098209B209BE'

Я пытаюсь выполнить sh две вещи здесь:

  • Понять Python Реализация
  • Воспроизвести ту же процедуру в Ruby 2,6

Пока я придумал следующее

text = 'আমার সোনার বাংলা'.encode("UTF-16BE")
p text
#output-> "\u0986\u09AE\u09BE\u09B0 \u09B8\u09CB\u09A8\u09BE\u09B0 \u09AC\u09BE\u0982\u09B2\u09BE"

1 Ответ

1 голос
/ 28 мая 2020

Обычно преобразование строки в байты выполняется с помощью метода unpack:

# ref unpack documentation for specifics, but I use 'H*' here for hex
message.encode('utf-16-be').unpack('H*')
...