Этот ужасный беспорядок, который вы видите, является UTF-8, интерпретируемым как ISO 8859-1.Это указывает на то, что где-то существует неправильное толкование того, что означают символы, и может быть вызвано или пересечением проводов по каналу связи, или в результате применения дополнительного цикла кодирования.Поскольку задействовано довольно много движущихся частей (IRC-клиент, IRC-сервер, eggdrop, ваш скрипт, Google переводчик), необходимо провести отладку.
Tcl и Google правильно общаются друг с другом (ямы дважды проверили код), чтобы мы могли исключить эту возможность.Следовательно, проблема заключается в том, что между вашим IRC-клиентом, IRC-сервером и eggdrop;если они не согласны с интерпретацией байтов «по проводам», вы получаете искажение.
Вы можете добавить (или удалить) искажение в сценарии с помощью encoding convertto
(иencoding convertfrom
) но необходимо , чтобы быть ясным , что вы делаете, чтобы понять это правильно.В памяти Tcl представляет строки как последовательности абстрактных символов Юникода;способ, которым они «записываются» в память, не является вашим делом (и на самом деле время от времени изменяется сложным образом, который почти всегда очень эффективен с точки зрения времени выполнения).Если существует общее соглашение о том, что канал IRC-сервера будет проходить через UTF-8, вам необходимо:
- Убедитесь, что скрипт eggdrop записывает символы канала в кодировке UTF8.
- Убедитесь, что ваш клиент читает символы в кодировке UTF8 из канала.
Имея дело с первым пунктом, я не могу вспомнить, обрабатывает ли eggdrop кодирование автоматически для вас или нет.Если это так, вы просто делаете это на заключительной стадии привязки:
putserv "PRIVMSG $chan :$translated"
Если это не так, вы делаете это:
putserv "PRIVMSG $chan :[encoding convertto utf-8 $translated]"
Эксперимент.Используйте правильный.
Во втором пункте (клиент), изучите его настройки и сделайте все правильно.Помните, что могут возникнуть дополнительные проблемы, если клиент работает в ситуации, когда он не может правильно отображать все символы Unicode (обычная проблема, если он работает в терминале).* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * *.