Иврит в командной строке - matlab
Возможный дубликат:
текст ('строка на иврите')
шалом
Я пытаюсь работать с еврейскими строками в Matlab. но когда я пытаюсь присвоить строку на иврите переменной, она не присваивается. например:
а ='א'
а =
есть идеи почему?
2 ответа
Aleph находится в UTF-16, который Matlab представляет со своим стандартным 2 байта char
формат. Это, вероятно, не поддерживает ввод этого пути.
Вы, вероятно, должны сделать
a = char(1488); % 1488 is UTF-16 for aleph
А затем выведите его каким-нибудь способом, читаемым UTF-16.
Если вы пытаетесь просто поместить иврит в название фигуры или что-то еще, вы можете написать латекс прямо так:
title('\aleph')
Если вы пытаетесь использовать Matlab для обработки текста, я думаю, что это сработает, но вы не сможете просматривать символы в командном окне Matlab.
Обновление: в моей системе даже запись в файл в кодировке на иврите не поддерживается:
fid = fopen('c:\temp\chris.txt','w','native','hebrew');
Warning: The encoding 'ISO-8859-8' is not supported.
See the documentation for FOPEN.
Но, возможно, ваша машина поддерживает это, если у вас настроены иврит.
Вот что я бы сделал для чтения / записи файлов в этом случае:
%# some Hebrew characters
hebrewString = repmat(char(1488),1,10); %# 'אאאאאאאאאא'
%# convert and write as bytes
b = unicode2native(hebrewString,'UTF-8');
fid = fopen('file.txt','wb');
fwrite(fid, b, '*uint8');
fclose(fid);
%# read bytes and convert back to Unicode string
fid = fopen('file.txt', 'rb');
b = fread(fid, '*uint8')'; %'
fclose(fid);
str = native2unicode(b,'UTF-8');
%# compare and check
isequal(str,hebrewString)
double(str)
Для отображения этой строки нам нужно, чтобы MATLAB знал о символах Юникода, вызывая:
feature('DefaultCharacterSet','UTF-8');
Теперь в командной строке вы можете попробовать:
>> str
str =
אאאאאאאאאא
Однако не удалось отобразить строку с функцией TEXT (может кто-нибудь подтвердить, действительно ли этот ответ работает, как заявлено?):
hTxt = text(0.1,0.5, str, 'FontName','David', 'FontSize',30);
set(hTxt, uisetfont(hTxt))
Я даже проверил, что правильные шрифты доступны:
>> fontsNames = fontinfo();
>> idx = ~cellfun(@isempty, strfind(lower(fontsNames),'david'));
>> fontsNames(idx)'
ans =
'David'
'David Bold'
'David Regular'
'David Transparent'
С другой стороны, и, как я показал в моем предыдущем ответе, решение для отображения этого текста в графическом интерфейсе состоит в использовании Java (MATLAB UICONTROL основан на компонентах Java Swing):
figure('Position',[300 300 500 50]), drawnow
uicontrol('Style','text', 'String',str, ...
'Units','normalized', 'Position',[0 0 1 1], ...
'FontName','David', 'FontSize',30);
(обратите внимание, что при использовании UICONTROL даже обычный шрифт Arial показывает правильный вывод!)