Иврит в командной строке - 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

(обратите внимание, что при использовании UICONTROL даже обычный шрифт Arial показывает правильный вывод!)

Другие вопросы по тегам