向tcl添加utf-8支持

向tcl添加utf-8支持,tcl,eggdrop,Tcl,Eggdrop,假设消息中有这些字符:ąęėįųūž所以bot输出奇怪的字符。因此,在我看来,解决方案是添加utf-8支持。Tcl已经拥有完全集成的utf-8支持超过十年了(自Tcl 8.1以来,尽管没有人再使用那个版本了,因为有单调更好的版本) 但是,通常有必要告诉Tcl在与外部世界的特定通信信道上使用了什么编码(使用fconfigure的-encoding选项)。Tcl使用依赖于系统的默认猜测;在我的系统上,它实际上是UTF-8,但在其他系统上,它是ISO 8859-1或-15或相应的Windows代码页。

假设消息中有这些字符:ąęėįųūž所以bot输出奇怪的字符。因此,在我看来,解决方案是添加utf-8支持。

Tcl已经拥有完全集成的utf-8支持超过十年了(自Tcl 8.1以来,尽管没有人再使用那个版本了,因为有单调更好的版本)

但是,通常有必要告诉Tcl在与外部世界的特定通信信道上使用了什么编码(使用
fconfigure
-encoding
选项)。Tcl使用依赖于系统的默认猜测;在我的系统上,它实际上是UTF-8,但在其他系统上,它是ISO 8859-1或-15或相应的Windows代码页。(顺便说一句,Tcl擅长猜测默认值)在套接字上,它更为笨拙,因为编码实际上是协议级别的决定(有些协议指定了一种特定的编码——SMTP指定,IIRC指定——协议运行期间的一些交换机编码——HTTP就是一个典型的例子——有些根本没有指定——IRC就是典型的例子)。在某些情况下,
编码
命令是必需的,这样脚本就可以手动控制字节序列和字符之间的转换。但这种情况相当罕见

当然,如果使用的代码只是获取Tcl的字符串,并使用低级网络(hellooo,eggdrop!)盲目地将它们推到网络上,那么一般的Tcl级别所能做的就不多了。在这种情况下,解决方法是要么构建eggdrop以使用不同的编码(如图所示)或者使用
编码
进行咀嚼,如下所示:

将UTF-8转换为编码形式: 将编码的UTF-8转换回正常字符串:
Tcl已经完全集成了UTF-8支持超过十年了(自Tcl 8.1以来,尽管没有人再使用那个版本了,因为有单调更好的版本)

但是,通常有必要告诉Tcl在与外部世界的特定通信信道上使用了什么编码(使用
fconfigure
-encoding
选项).Tcl使用依赖于系统的默认猜测;在我的系统上,它实际上是UTF-8,但在其他系统上,它是ISO 8859-1或-15或相应的Windows代码页。(顺便说一句,Tcl擅长进行默认猜测。)在套接字上,它更尴尬,因为编码实际上是协议级别的决定(有些协议指定了一种特定的编码——SMTP指定,IIRC指定——协议运行期间的一些交换机编码——HTTP就是一个典型的例子——有些根本没有指定——IRC就是典型的例子)。在某些情况下,
编码
命令是必需的,这样脚本就可以手动控制字节序列和字符之间的转换。但这种情况相当罕见

当然,如果使用的代码只是获取Tcl的字符串,并使用低级网络(hellooo,eggdrop!)盲目地将它们推到网络上,那么一般的Tcl级别所能做的就不多了。在这种情况下,解决方法是要么构建eggdrop以使用不同的编码(如图所示)或者使用
编码
进行咀嚼,如下所示:

将UTF-8转换为编码形式: 将编码的UTF-8转换回正常字符串:
Ech,这似乎不是脚本错误,我需要重新编译孔蛋液:请将此问题设置为solvedZero:堆栈溢出的工作方式是,当单击答案旁边的复选标记时,问题被标记为已解决。Ech,这似乎不是脚本错误,我需要重新编译孔蛋液:请将此问题设置为solvedZero:w堆栈溢出的工作原理是,当单击答案旁边的复选标记时,问题被标记为已解决。
set botlisten(port) "3333"
set botlisten(password) "123456"
set botlisten(channel) "#chan"
listen $botlisten(port) script botlisten
proc botlisten {idx} {
    control $idx botlisten2
}
proc botlisten2 {idx args} {
global botlisten newTorrentChannel
set args [join $args]
set botlisten(pass) [lindex [split $args] 0]
set botlisten(message) [join [lrange [split $args] 1 end]]
if {[string match $botlisten(pass) $botlisten(password)]} then {
   putquick "PRIVMSG $botlisten(channel) :$botlisten(message)"
 } else {
  putlog "Unauthorized person tried to connect to the bot"
  }
}  
set encoded [encoding convertto utf-8 $normalString]
set normalString [encoding convertfrom utf-8 $encoded]