Tcl имеет очень мало метасимволов, как только вы внутри строки в двойных кавычках, и все они могут быть заключены в кавычки, поставив перед ними обратную косую черту. Символы, которые вы должны заключить в кавычки, - это \
, $
и [
, но рекомендуется также заключать в кавычки ]
, {
и }
, чтобы сам сценарий был встраиваемым. (Собственная команда Tcl list
делает это, за исключением того, что она фактически не переносит двойные кавычки, поэтому она также обрабатывает обратную косую черту и пытается также использовать другие методы для «хороших» строк. Есть алгоритм для этого, но я советуем не беспокоиться о такой большой сложности в вашем коде; простые универсальные правила намного лучше для правильного кодирования.)
Второй шаг - получить данные в Tcl. Если вы генерируете файл, лучше всего записать его как UTF-8 и использовать опцию -encoding
для команды tclsh / wish или для команды source
для явного указания кодировки. (Если вы находитесь в одном и том же процессе, запишите данные UTF-8 в строку и оцените их. Задание выполнено.) Этот параметр (введенный в Tcl 8.5) специально предназначен для решения такой проблемы:
source -encoding "utf-8" theScriptYouWrote.tcl
Если это невозможно, вам придется вернуться к добавлению дополнительных цитат. Лучше всего тогда предположить, что у вас есть только доступная поддержка ASCII (хороший наименьший общий знаменатель) и процитировать все остальное как отдельный шаг к цитированию, описанному в первом абзаце . Чтобы заключить в кавычки, преобразуйте каждый символ Unicode от U + 00080 до escape-последовательности вида \uXXXX
, где XXXX - ровно четыре шестнадцатеричных цифры [1] , а два других - буквенные символы. Не используйте форму \xXX
, так как в ней есть некоторые «удивительные» ошибки (увы).
[1] В Tcl есть открытая ошибка, связанная с обработкой символов вне базовой многоязычной панели, часть которой заключается в том, что форма \u
не может справиться. К счастью, не-BMP персонажи все еще достаточно редки на практике.