如何创建整数0..9和数学运算符+ - */in到二进制字符串.例如:
0 = 0000,
1 = 0001,
...
9 = 1001
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用库的情况下使用Ruby 1.8.6执行此操作?
我正在编写一个Python(Python 3.3)程序,使用POST方法将一些数据发送到网页.主要用于调试过程我得到页面结果并使用print()函数在屏幕上显示它.
代码是这样的:
conn.request("POST", resource, params, headers)
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
print(data.decode('utf-8'));
Run Code Online (Sandbox Code Playgroud)
该HTTPResponse .read()方法返回一个bytes编码页面的元素(这是一个结构良好的UTF-8文档)在我停止使用Windows的IDLE GUI并使用Windows控制台之前,这似乎没问题.返回的页面有一个U + 2014字符(em-dash),打印功能可以在Windows GUI中很好地转换(我假定代码页1252),但不在Windows控制台中(代码页850).鉴于strict默认行为,我收到以下错误:
UnicodeEncodeError: 'charmap' codec can't encode character '\u2014' in position 10248: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)
我可以使用这个非常难看的代码修复它:
print(data.decode('utf-8').encode('cp850','replace').decode('cp850'))
Run Code Online (Sandbox Code Playgroud)
现在用一个替换有问题的字符" - " ?.不是理想的情况(连字符应该是一个更好的替代品),但足够我的目的.
我的解决方案中有几件我不喜欢的东西.
问题不在于emdash(我可以想到解决这个问题的几种方法),但我需要编写健壮的代码.我正在向页面提供来自数据库的数据,并且数据可以返回.我可以预见到许多其他相互矛盾的情况:'Á'U+ 00c1(在我的数据库中可能)可以转换为CP-850(西欧语言的DOS/Windows控制台编码)但不能转换为CP-437(美国的编码)英语,在许多Windows instalations中是默认的).
那么,问题是:
有没有更好的解决方案使我的代码与输出接口编码无关?
我想将一个字符串编码为base64并通过套接字传输并解码回来.但解码后它给出了不同的答案.以下是我的代码,结果是"77 + 9x6s ="
import javax.xml.bind.DatatypeConverter;
public class f{
public static void main(String a[]){
String str = new String(DatatypeConverter.parseBase64Binary("user:123"));
String res = DatatypeConverter.printBase64Binary(str.getBytes());
System.out.println(res);
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一点的任何想法?
谢谢...
Ruby中内置的Base64库正在添加一些'\n'.我无法找出原因.对于这个特例:
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'base64'
=> true
irb(main):003:0> str = "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
=> "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
irb(main):004:0> Base64.encode64(str)
=> "MTExMC0tYWQ2Y2EwYjA2ZTFmYmViN2U2NTE4YTA0MThhNzNhNmUwNGE2NzA1\nNA==\n"
Run Code Online (Sandbox Code Playgroud)
\n是从结尾开始的最后一个位置和第六个位置.解码器(Base64.decode64)完美地返回旧字符串.奇怪的是,这些\n不会为编码字符串添加任何值.当我从输出字符串中删除换行符时,解码器会再次完美地对其进行解码.
irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true
Run Code Online (Sandbox Code Playgroud)
更多的是,我使用另一个JS库来生成相同输入字符串的base64编码输出,输出没有\n的.
这是一个错误还是其他什么?以前有人遇到过这个问题吗?
仅供参考,
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Run Code Online (Sandbox Code Playgroud) 可能重复:
使用PHP进行漂亮的JSON打印
我正在编写一个创建JSON文件的脚本.现在我只是使用json_encode(PHP 5.2.x)将数组编码为JSON输出.然后我将返回的值打印到文件并保存.问题是客户端希望能够打开这些JSON文件以便于阅读,所以我想在其中添加换行符和"漂亮打印"JSON输出.关于如何做到这一点的任何想法?我唯一能看到的另一种选择是根本不使用json_encode,只需手动编写文件内容并为每一行添加自己的换行符.
这是我得到的:
{"product_name":"prod1","val1":1,"val2":8}
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
{
"product_name":"prod1",
"val1":1,
"val2":8
}
Run Code Online (Sandbox Code Playgroud)
我想我也可以用命令后跟一个\n来替换每个逗号,对于括号也是如此...思考?
我正在为我的网站制作一个URL缩短器,我当前的计划(我愿意接受建议)是使用节点ID来生成缩短的URL.因此,理论上,节点26可能是short.com/z,节点1可能是short.com/a,节点52可能是short.com/Z,节点104可能是short.com/ZZ.当用户访问该URL时,我需要反转该过程(显然).
我可以想到一些方法可以解决这个问题,但我猜测有更好的方法.有什么建议?
我想base64编码数据把它放在一个URL中,然后在我的HttpHandler中解码它.
我发现Base64编码允许使用'/'字符,这会弄乱我的UriTemplate匹配.然后我发现维基百科有一个"修改过的Base64 for URL"的概念:
存在修改的URL变体Base64,其中不使用填充'=',标准Base64的'+'和'/'字符分别替换为' - '和'_',因此使用URL编码器/解码器不再需要,并且对编码值的长度没有影响,保留相同的编码形式,以便在关系数据库,Web表单和对象标识符中使用.
使用.NET我想修改我当前的代码,从基本的base64编码和解码到使用"修改的base64 for URL"方法.有没有人这样做过?
为了解码,我知道它开头是这样的:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Run Code Online (Sandbox Code Playgroud)
但是,我需要在结尾处添加一个或两个'='字符,这看起来有点复杂.
我的编码逻辑应该更简单一些:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
Run Code Online (Sandbox Code Playgroud)
我已经看到Guid to Base64用于URL StackOverflow条目,但是它具有已知长度,因此它们可以硬编码最后所需的等号数.
我正在阅读和解析Amazon XML文件,而XML文件显示',当我尝试打印它时,我收到以下错误:
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
从我到目前为止在线阅读的内容来看,错误来自于XML文件是UTF-8,但Python希望将其作为ASCII编码字符处理.是否有一种简单的方法可以使错误消失并让我的程序在读取时打印XML?
我有一个不受信任的字符串,我想在HTML页面中显示为文本.我需要以HTML实体的形式逃避字符' <'和' &'.越少越好.
我正在使用UTF8,并且不需要其他实体用于重音字母.
Ruby或Rails中是否有内置函数,或者我应该自己编写?