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