Преобразование NSString к cString для использования с CGContextShowTextAtPoint

Я продолжаю забывать это и возвращаться к нему снова! Я думаю, что лучший ответ является комбинацией ответов, обеспеченных до сих пор.

Во-первых, & переменный префикс в sqlplus/sqldeveloper, следовательно проблема - когда это появится, это, как ожидают, будет частью имени переменной.

НАБОР ОПРЕДЕЛЯЕТ ПРОЧЬ, остановит sqlplus, интерпретирующий & этот путь.

, Но что, если необходимо использовать sqlplus переменные и литерал & символы?

  • Вы должны УСТАНОВИТЬ, ОПРЕДЕЛЯЮТ НА заставить переменные работать
  • И УСТАНОВИТЬ ESCAPE НА выйти из использования &.

, например,

set define on
set escape on

define myvar=/forth

select 'back\\ \& &myvar' as swing from dual;

Производит:

old   1: select 'back\\ \& &myvar' from dual
new   1: select 'back\ & /forth' from dual

SWING
--------------
back\ & /forth

, Если Вы хотите использовать различный символ ESC:

set define on
set escape '#'

define myvar=/forth

select 'back\ #& &myvar' as swing from dual;

при установке определенного символа ESC можно видеть 'SP2-0272: символ ESC не может быть алфавитно-цифровым или пробел'. Это, вероятно, означает, что Вам уже определили символ ESC, и вещи становятся ужасно самосправочными. Очевидный способ предотвращения этой проблемы должен выделить Escape сначала:

set escape off
set escape '#'
6
задан Erik 21 February 2012 в 20:35
поделиться

1 ответ

«Специальные символы», на которые вы ссылаетесь, поддерживаются кодировкой Unicode NSString, но не кодировкой MacRoman, используемой вашими процедурами рисования шрифтов Core Graphics (только две кодировки, которые вы можете установить, используя CGContextSelectFont () - это kCGEncodingMacRoman и kCGEncodingFontSpecific). Это недостаток маршрута CGContextShowTextAtPoint () для рисования текста. Из-за этого я использую метод NSString -drawAtPoint: всякий раз, когда мне нужно вручную нарисовать текст в контексте Core Graphics.

Что касается производительности, в комментарии к более раннему ответу Кайл провел тестирование drawAtPoint: как отрисовка 75 раз в секунду по сравнению с отрисовкой CGContextShowTextAtPoint () 99 раз в секунду. Это не большая разница в скорости отрисовки, поэтому вы не получите многого, идя этим путем. По моему опыту, -drawAtPoint: более чем достаточно для моих приложений.

РЕДАКТИРОВАТЬ (14.10.2009): Как указал Сикстен Отто, я неправильно читаю свой собственный код. UTF-8 поддерживает полный диапазон символов, MacRoman шрифта - нет.

6
ответ дан 17 December 2019 в 02:30
поделиться