8

我有一个包含乌尔都语字符的字符串,例如 'بجلی' 这是一个 1x4 数组。我想将其保存到一个文件中,该文件将在外部查看。尽管此字符串不会显示在主命令窗口中,但变量“str”确实保存了它。当我使用 fprintf(fid, str) 保存它并在记事本中打开该文件时,原始字符上会出现“箭头”。我可以轻松地将我的字符手动粘贴到记事本中。问题出在哪里?

4

3 回答 3

9

您需要使用 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
于 2012-09-14T03:01:27.667 回答
6

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);
于 2015-07-22T13:49:47.937 回答
0

查找字符图中的每个字符似乎很难。代码可以修改为以下代码:

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

这似乎更容易,但唯一的缺点是它需要您安装阿拉伯语/波斯语/乌尔多语,...。

于 2014-12-07T21:18:42.360 回答