Я работаю с Ruby-FFI на Ruby 1.8, чтобы обернуть библиотеку, которая использует строки UTF-16LE. В библиотеке есть функция C, которая возвращает такую строку.
Оборачиваю ли я функцию
attach_function [:getVersion, [], :pointer]
и вызвать read_string
для возвращенного указателя, или я оберну его с помощью
attach_function [:getVersion, [], :string]
Я получаю только первый символ, потому что второй символ равен нулю (\000
), и в результате FFI перестает читать строку там, очевидно, потому что он предполагает, что имеет дело с нормальной строкой с одним нулем в конце.
Есть ли что-то, что мне нужно сделать, возможно, при инициализации моей программы Ruby или FFI или иным образом, чтобы он знал, что я ожидаю, что строки будут закодированы в UTF-16LE? Как еще я могу это обойти?