我有一个包含urdu字符的字符串,例如'بجلی'这是一个1x4数组。我想将其保存到一个文件,可以在外部查看。虽然这个字符串不会显示在主命令窗口中,但变量'str'确实存在它。当我使用fprintf(fid,str)保存它,并在记事本中打开该文件时,会在原始字符上显示“箭头”。我可以轻松地将我的角色粘贴到记事本中。问题在哪里?
答案 0 :(得分:8)
你需要使用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 $1}}"
1576
1580
1604
1740
答案 1 :(得分:4)
为了在文件中写入UTF-8字符串,没有必要避免fprintf
。我们的想法是正确打开文件:
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);
答案 2 :(得分:0)
fid = fopen('temp.txt', 'w');
str = char(['س','ل','ا','م');
encoded_str = unicode2native(str, 'UTF-8');
fwrite(fid, encoded_str, 'uint8');
fclose(fid);
这似乎更容易,但唯一的缺点是它需要你安装阿拉伯语/波斯语/ Urdo,...