Запись строк unicode в файл в Matlab

У меня есть строка, содержащая символы урду, такие как "بجلی" это массив 1x4. Я хочу сохранить это в файл, который будет просматриваться извне. Хотя эта строка не отображается в главном окне команды, но переменная 'str' ее удерживает. Когда я сохраняю это с помощью fprintf (fid, str) и открываю этот файл в блокноте, вместо исходных символов появляются "стрелки". Я могу легко вставить свои символы в блокнот вручную. В чем проблема?

3 ответов


вам нужно использовать fwrite (), а не fprintf ():

fid = fopen('temp.txt', 'w');

str = char([1576, 1580,  1604, 1740, 10]);

encoded_str = unicode2native(str, 'UTF-8');
fwrite(fid, encoded_str, 'uint8');

fclose(fid);

проверен:

perl -E "open my $fh, q{<:utf8}, q{temp.txt}; while (<$fh>) {while (m/(.)/g) {say ord }}"
1576
1580
1604
1740

на самом деле нет необходимости избегать fprintf для записи строк UTF-8 в файл. Идея в том, чтобы правильно открыть файл:

f = fopen('temp.txt', 'w', 'native', 'UTF-8');
s = char([1576, 1580, 1604, 1740]);
fprintf(f, 'This is written as UTF-8: %s.\n', s);
fclose(f);

поиск каждого символа на карте символов может показаться сложным. Код может быть изменен в следующий код:

fid = fopen('temp.txt', 'w');
str = char(['س','ل','ا','م');
encoded_str = unicode2native(str, 'UTF-8');
fwrite(fid, encoded_str, 'uint8');
fclose(fid);

Это кажется проще, но единственным недостатком является то, что он требует, чтобы у вас был арабский/персидский/Урдо,... установленный.