【问题标题】:Passing Special Characters into telnet Unix将特殊字符传递到 telnet Unix
【发布时间】:2015-03-26 05:04:45
【问题描述】:

我使用以下命令通过 SMS Adapters 发送 SMS 消息:

telnet localhost 0000 <<-EOF 
helo x
MAIL FROM: Test
RCPT TO: 447999999999
DATA

Test £1234
.
logout
quit
EOF

但是,当我通过它收到消息时,格式如下:

Test ?£1234

附加 ?在 £ 符号的前面,我尝试研究了一些方法,包括 MIME,但不太确定如何实现它们。

关于我如何阻止并让£成功通过的任何想法

【问题讨论】:

  • 你有双重打击。您将 unicode 字符转储到电子邮件系统中,然后该电子邮件将被推送到 SMS 消息中。您需要对文本进行双重编码,以便将其通过电子邮件阶段转换为短信系统可接受的格式。
  • @MarcB 你将如何实现这个?或者你有我可以看的例子吗?

标签: unix ksh telnet mime


【解决方案1】:

您是否尝试过先对消息进行编码?您可以使用 UTF-8 字符集中的 base64 来执行此操作:- 例如 转变: 味精="£1234" 到: msg="wqMxMjM0"

注意:尝试使用在线转换器测试编码/解码 - https://www.base64encode.org/

编码文本后,您可以通过 telnet 发送消息,方法是在 telnet 中的 DATA 命令后添加 MIME 详细信息,方法是指定 MIME 类型,示例脚本如下:-

telnet localhost 0000 <<-EOF 
helo x
MAIL FROM: Test
RCPT TO: 447999999999
DATA
Subject: Test
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64

${msg}
.
logout
quit
EOF

希望对您有所帮助。

【讨论】:

  • 如果有人使用 #expect - 使用这个 - 发送 "Content-Type: text/html; charset='UTF-8'; Content-Transfer-Encoding: base64;"; - 感谢@Bexxy 的方向
【解决方案2】:

在某些安装中,默认情况下 telnet 不是 8 位干净的(它不识别 Unicode 等 8 位字符编码)。为了能够将 Unicode 击键发送到远程主机,您需要将 telnet 设置为“outbinary”模式。有两种方法可以做到这一点:

$ telnet -L &lt;host&gt;

$ telnet

telnet&gt; set outbinary

telnet&gt; open &lt;host&gt;

Source

【讨论】:

  • telnet -L localhost ${PORT} &lt;&lt;-EOF &gt; "${TMP_DIR}/telnet_result.txt" helo x MAIL FROM: ${FROM} RCPT TO: ${MSISDN} DATA $SMS_MESSAGE . logout quit EOF 我试过实现这个但是没有运气仍然通过不正确,还尝试了命令的EOF段中的set outbinary
  • 您的配置是什么(Windows/Linux/OS X)?以及你如何运行你的命令(腻子,命令行......)?
  • Unix Solaris 10,以及它的 ksh 脚本
  • 好的!因此,如果您的文件telenet_result.txt 的编码字符集是固定的,您可以使用 iconv 命令(例如:iconv -f utf-16 -t utf-8 ./telnet_result.txt)。如果它不固定,您将不得不编写一个“编码嗅探器”来确定编码字符集。
  • telnet_result.txt 只是一个处理输出的文件,与 telnet 命令无关,不过是个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2021-02-12
  • 2013-09-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多