Tcl файл существует не удается для имен файлов с китайскими символами - PullRequest
0 голосов
/ 30 марта 2020
  1. При запуске сценария tcl, который проверяет существование файла, встроенная команда tcl (file exists) не выполняется, поскольку путь к файлу и имя файла (文档名称) содержат китайские символы. Я знаю, что символы Unicode поддерживаются в интерпретаторе Tcl. Я попробовал команду encoding convertfrom и encoding convertto, но это не решает проблему.

  2. Кроме того, когда я назначаю китайские символы для строки в Tcl, скажем

    set a "文档名称"
    puts $a
    

    Консоль выводит некоторые странные значения, но не строку с китайскими символами. Я попытался преобразовать строку a в utf-8, используя ту же команду кодирования, упомянутую выше, но это не сработало. Я не уверен, где я иду не так в обоих случаях. Даже я попытался распечатать символы в файл, который также показал некоторые странные символы. Пожалуйста, помогите мне в решении проблемы.

1 Ответ

2 голосов
/ 31 марта 2020

Используя скрипт:

set flist [glob *]
foreach f $flist {
  if { [file exists $f] } {
     puts "$f: OK"
  } else {
     puts "$f: NG"
  }
}
set a "文档名称"
set f $a
if { [file exists $f] } {
   puts "$f: OK"
} else {
   puts "$f: NG"
}

Просто запустив tclsh.exe script.tcl, последний оператор if потерпит неудачу. Скрипт читается с использованием системной кодировки, и китайские символы не конвертируются правильно. Первый l oop, использующий оператор glob, работает.

Использование tclsh.exe -encoding utf-8 script.tcl, а последний оператор if работает.

По сути, урок состоит в том, чтобы не вставлять символы utf-8 в вашем сценарии. Вместо этого считывайте данные из файла (используя fconfigure $fh encoding utf-8) или из другого источника, а затем используйте данные.

Консоль cmd.exe windows не поддерживает альтернативные наборы символов и не может использоваться для отладки. Это просто не будет работать. Вместо этого запишите выходные данные отладки в файл и используйте блокнот для просмотра файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...