- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用一个 API,其中我必须通过 telnet 连接将客户端信息作为 Json 对象发送(很奇怪,我知道^^)。
我是德国人,所以客户信息经常包含变音或 ß。
我的程序:
.to_s
)。 puts
命令看起来像:(cmd 是 Json 对象)
host.puts(cmd.to_s.force_encoding('UTF-8'))
ü
而不是
ü
.
force_encoding()
命令)。所以我认为
puts
命令不会以 UTF-8 格式发送字符串。
host = Net::Telnet::new(
'Host' => host_string,
'Port' => port_integer,
'Output_log' => 'log/'+Time.now.strftime('%Y-%m-%d')+'.log',
'Timeout' => false,
'Telnetmode' => false,
'Prompt' => /\z/n
)
def send_cmd_container(host, cmd, params=nil)
cmd = JSON.generate({'*C'=>'se','Q'=>[get_cmd(cmd, params)]})
host.puts(cmd.to_s.force_encoding('UTF-8'))
add_request_to_logfile(cmd)
end
def get_cmd(cmd, params=nil)
if params == nil
return {'*C'=>'sq','CMD'=>cmd}
else
return {'*C'=>'sq','CMD'=>cmd,'PARAMS'=>params}
end
end
def add_request_to_logfile(request_string)
directory = 'log/'
File.open(File.join(directory, Time.now.strftime('%Y-%m-%d')+'.log'), 'a+') do |f|
f.puts ''
f.puts '> '+request_string
end
end
ü
最佳答案
TL; 博士
套装'Binmode' => true
并使用 Encoding::BINARY
.
以上应该对你有用。如果您对原因感兴趣,请继续阅读。
Telnet 并没有真正的“编码”概念。 Telnet 只有两种模式:普通模式假设您发送的是 7 位 ASCII 字符,而二进制模式假设您发送的是 8 位字节。您不能告诉 Telnet “这是 UTF-8”,因为 Telnet 不知道这意味着什么。您可以告诉它“这是 ASCII-7”或“这是一个 8 位字节序列”,仅此而已。
这似乎是个坏消息,但实际上是个好消息,因为 UTF-8 恰好将文本编码为 8 位字节序列。 früh
例如,是五个字节:66 72 c3 bc 68
.这在 Ruby 中很容易确认:
puts str = "\x66\x72\xC3\xBC\x68"
# => früh
puts str.bytes.size
# => 5
'Binmode' => true
来打开二进制模式。选项
Net::Telnet::new
.但是我们还需要做一件事:告诉 Ruby 将字符串视为二进制数据,即 8 位字节序列。
String#force_encoding
,但您可能没有意识到
String#force_encoding
实际上不会将字符串从一种编码转换为另一种编码。它的目的不是改变数据的编码——它的目的是告诉 Ruby 数据已经采用了什么编码:
str = "früh" # => "früh"
p str.encoding # => #<Encoding:UTF-8>
p str[2] # => "ü"
p str.bytes # => [ 102, 114, 195, 188, 104 ] # This is the decimal represent-
# ation of the hexadecimal bytes
# we saw before, `66 72 c3 bc 68`
str.force_encoding(Encoding::BINARY) # => "fr\xC3\xBCh"
p str[2] # => "\xC3"
p str.bytes # => [ 102, 114, 195, 188, 104 ] # Same bytes!
Encoding::BINARY
只是
Encoding::ASCII_8BIT
的别名.由于 ASCII-8BIT 没有多字节字符,Ruby 显示
ü
作为两个单独的字节,
\xC3\xBC
.这些字节不是 ASCII-8BIT 中的可打印字符,因此 Ruby 显示
\x##
转义码,但数据没有改变——只是 Ruby 打印它的方式改变了。
data[n]
它总是会得到一个字节(而不是像 UTF-8 那样可能得到多字节字符),这正是我们想要的。
host = Net::Telnet::new(
# ...all of your other options...
'Binmode' => true
)
def send_cmd_container(host, cmd, params=nil)
cmd = JSON.generate('*C' => 'se','Q' => [ get_cmd(cmd, params) ])
cmd.force_encoding(Encoding::BINARY)
host.puts(cmd)
# ...
end
JSON.generate
总是返回一个 UTF-8 字符串,所以你永远不必这样做,例如
cmd.to_s
。)
'Dump_log'
选项(与您设置
'Output_log'
选项的方式相同)。它将发送和接收的数据以十六进制转储格式写入日志文件,这将允许您查看发送的字节是否正确。例如,我启动了一个测试服务器(
nc -l 5555
)并发送了字符串
früh
(
host.puts "früh".force_encoding(Encoding::BINARY)
),这是记录的内容:
> 0x00000: 66 72 c3 bc 68 0a fr..h.
f
和
r
,后面两个补
ü
,最后两个是
h
和换行符。在右侧,不可打印字符的字节显示为
.
, ergo
fr..h.
. (出于同样的原因,我发送了字符串
I❤NY
并在右栏中看到了
I...NY.
,因为
❤
是 UTF-8 中的三个字节:
e2 9d a4
)。
'Dump_log'
并发送
ü
,你应该看到
c3 bc
在输出中。如果你这样做了,恭喜你——你发送的是 UTF-8!
关于ruby - Net::Telnet - 以 UTF-8 格式放置或打印字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25627795/
创建使用.NET框架的asp.net页面时,访问该页面的客户端是否需要在其计算机上安装.NET框架? IE。用户访问www.fakesite.com/default.aspx,如果他们没有安装框架,他
我阅读了很多不同的博客和 StackOverflow 问题,试图找到我的问题的答案,但最后我找不到任何东西,所以我想自己问这个问题。 我正在构建一个应用程序,其中有一个长时间运行的工作线程,它执行一些
已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我一直想知道为什么微软为这样一个伟大的平台选择了一个如此奇怪的、对搜索引擎不友好的名称。他们就
.Net Framework .Net .NET Standard的区别 1、.NET Framework 在未来.NET Framework或许成为过去时,目前还是有很多地方在使用的。这一套
如果有选择的话,您会走哪条路? ASP.NET Webforms + ASP.NET AJAX 或 ASP.NET MVC + JavaScript Framework of your Choice
我有一个 Web 服务,它通过专用连接通过 https 使用第三方 Web 服务,我应用了 ServicePointManager.ServerCertificateValidationCallbac
为什么我应该选择ASP.NET Web Application (.NET Framework)而不是ASP.NET Core Web Application (.NET Framework)? 我在
我在网络上没有找到任何关于包含 .NET Standard、.NET Core 和 .NET Framework 项目的 .NET 解决方案的公认命名约定。 就我而言,我们在 .NET 框架项目中有以
.NET Compact 是 .NET 的完美子集吗? 假设我考虑了屏幕大小和其他限制并避免了 .NET Compact 不支持的类和方法,或者 .NET Compact 是一个不同且不兼容的 GUI
我已经阅读了所有我能找到的关于 connectionManagement 中的 maxconnection 设置的文章:即 http://support.microsoft.com/kb/821268
我现在正在使用asp.net mvc,想知道使用内置的Json或 Json.Net哪个是更好的选择,但我不确定一个人是否比另一个人有优势。 另外,如果我确实选择沿用Json.Net的路线,那么我应该选
在 Visual Studio 中,您至少可以创建三种不同类型的类库: 类库(.NET Framework) 类库(.NET 标准) 类库(.NET Core) 虽然第一个是我们多年来一直使用的,但我
.NET 和 ASP.NET 之间有什么区别?它们有什么关系? 最佳答案 ASP.Net 基于 .Net 框架构建,提供有关 Web 开发的附加功能。 你可以去看看wikipedia article
在安装更高版本(3.0)之前,我需要安装.net框架1.1和2.0吗?或者单独安装 3.0 框架就足够了,并为在早期框架版本上编写的软件提供支持?谢谢 ,丽然 最佳答案 不,您不必安装以前的框架。 我
我正在开发一个项目,人们可以“更新”类别,例如更改类别的名称。我收到以下消息 This is called after clicking update 按钮 with the SQL statemen
.NET 类 System.Net.CookieContainer 线程安全吗? --更新:交 key 答复-- 是否有任何方法可以确保异步请求期间修改的变量(即 HttpWebRequest.Coo
我正在使用 JScript.NET 在我编写的 C# WinForms 应用程序中编写脚本。它工作得很好,但我只是尝试在脚本中放置一些异常处理,但我无法弄清楚如何判断我的 C# 代码抛出了哪种类型的异
我需要你的帮助, 比如我有一个小数类型的变量,我想这样取整。 例如 3.0 = 3 3.1 = 4 3.2 = 4 3.3 = 4 3.4 = 4 3.5 = 4 3.6 = 4 3.7 = 4 3.
我使用过这样的代码:http://msdn.microsoft.com/en-us/library/dw70f090.aspx在 ASP.NET 中工作之前访问数据库(2-3 年前)。我没有意识到我正
自 ConfigurationManager .NET Standard 中不存在,检索正在执行的程序集的应用程序设置的最佳方法是什么,无论是 web.config或 appSettings.{env
我是一名优秀的程序员,十分优秀!