我有一个网站,以不同的方式处理URL的路径部分(而不是查询字符串)中的"/"和"%2F".根据RFC或现实世界,这是一件坏事吗?
我问,因为我正在使用我正在使用的Web框架(Ruby on Rails)以及下面的图层(Passenger,Apache,例如,我必须为Apache启用"ALLOW_ENCODED_SLASHES").我现在倾向于完全摆脱编码的斜杠,但我想知道我是否应该提交错误报告,我看到涉及编码斜线的奇怪行为.
至于为什么我首先有编码的斜杠,基本上我有这样的路线:
:controller/:foo/:bar
Run Code Online (Sandbox Code Playgroud)
其中:foo就像一个可以包含斜杠的路径.我认为最简单的做法就是只进行URL转义,foo以便路由机制忽略斜杠.现在我有疑虑,而且很明显框架并不真正支持这一点,但根据RFC,这样做是错误的吗?
以下是我收集的一些信息:
RFC 1738(URL):
当八位字节由一个字符表示并且在编码时,URL通常具有相同的解释.但是,保留字符不是这样:编码为特定方案保留的字符可能会更改URL的语义.
RFC 2396(URI):
这些字符称为"保留",因为它们在URI组件中的使用仅限于其保留的用途.如果URI组件的数据与保留的目的冲突,则必须在形成URI之前转义冲突的数据.
(这里的转义是否意味着除了编码保留字符之外的东西?)
RFC 2616(HTTP/1.1):
除"保留"和"不安全"集合之外的字符(参见RFC 2396 [42])等同于它们的"%"HEX HEX"编码.
还有针对Rails的错误报告,他们似乎希望编码的斜杠行为不同:
是的,我期望得到不同的结果,因为他们指的是不同的资源.
它正在根目录中查找文字文件'foo/bar'.非转义版本正在查找目录foo中的文件栏.
从RFC中可以清楚地看出,原始与编码相当于未保留的字符,但保留字符的故事是什么?
我有一个Java应用程序,它读取已在Excel中创建的CSV文件(例如2007).有谁知道MS Excel使用什么字符集来保存这些文件?
我猜对了:
但我无法使用这些字符集类型解码扩展字符(例如法语强调字母).
我正在编写一个脚本,尝试在Python 2.6中将字节编码为许多不同的编码.有没有办法获得可以迭代的可用编码列表?
我试图这样做的原因是因为用户有一些未正确编码的文本.有趣的人物.我知道unicode角色搞砸了.我希望能够给他们一个答案,例如"你的文本编辑器将该字符串解释为X编码,而不是Y编码".我以为我会尝试使用一种编码对该字符进行编码,然后使用另一种编码再次对其进行解码,看看我们是否得到相同的字符序列.
即是这样的:
for encoding1, encoding2 in itertools.permutation(encodinglist(), 2):
try:
unicode_string = my_unicode_character.encode(encoding1).decode(encoding2)
except:
pass
Run Code Online (Sandbox Code Playgroud) 我有一个包含表单的页面.此页面的内容类型为text/html; charset = utf-8.我需要使用ISO-8859-1字符编码将此表单提交给服务器.这可能是Internet Explorer吗?
将accept-charset属性设置为表单元素,就像这样,适用于Firefox,Opera等,但不适用于IE.
<form accept-charset="ISO-8859-1">
...
</form>
Run Code Online (Sandbox Code Playgroud)
编辑:此表单由服务器A创建,并将提交给服务器B.我无法控制服务器B.
如果我将服务器A设置为使用charset ISO-8859-1提供内容,一切正常,但我正在寻找一种方法来使这项工作无需更改服务器A的编码.我有另一个关于在服务器A中设置编码的问题.
我正在写一个TFS Checkin策略,它检查我们的源文件是否包含我们的文件头.
我的问题是,我们的文件头包含一个特殊字符"©",不幸的是我们的一些源文件是用ANSI编码的.因此,如果我在策略中读取这些文件,则字符串看起来像"Copyright 2009".
string content = File.ReadAllText(pendingChange.LocalItem);
Run Code Online (Sandbox Code Playgroud)
我厌倦了改变字符串的编码,但它没有帮助.那么如何阅读这些文件,我得到了正确的字符串"Copyright©2009"?
感谢帮助!
关心恩伊
我收到错误:
parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xED 0x6E 0x2C 0x20
尝试使用simplexml_load_string第三方源处理XML响应时.原始XML响应确实声明了内容类型:
<?xml version="1.0" encoding="UTF-8"?>
然而,似乎XML并不是真正的UTF-8.XML内容的语言是西班牙语,包含DublínXML中的单词.
我无法让第三方整理他们的XML.
如何预处理XML并修复编码不兼容性?
有没有办法检测XML文件的正确编码?
我在Python中搜索一个简短而酷的rot13函数;-)我写了这个函数:
def rot13(s):
chars = "abcdefghijklmnopqrstuvwxyz"
trans = chars[13:]+chars[:13]
rot_char = lambda c: trans[chars.find(c)] if chars.find(c)>-1 else c
return ''.join( rot_char(c) for c in s )
Run Code Online (Sandbox Code Playgroud)
谁能让它变得更好?例如,支持大写字符.
我正在使用下面的代码来读取包含外来字符的文本文件,该文件是ANSI编码的,在记事本中看起来很好.下面的代码不起作用,当读取文件值并在数据网格中显示字符显示为正方形时,其他地方是否会出现其他问题?
StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))
Run Code Online (Sandbox Code Playgroud)
谢谢
更新1:我已经尝试了所有编码System.Text.Encoding.并且都无法正确显示文件.
更新2:我已经将文件编码(重新保存文件)更改为unicode并使用,System.Text.Encoding.Unicode并且它工作得很好.那么为什么记事本读得正确呢?为什么没有System.Text.Encoding.Unicode读取ANSI文件?
让我们说我有一个字符串5a.这是ASCII字母Z的十六进制表示.我需要知道一个Linux shell命令,它将采用十六进制字符串并输出字符串表示的二进制字节.
所以,如果我这样做
echo 5a | command_im_looking_for
Run Code Online (Sandbox Code Playgroud)
我打开Z,我会看到一封孤零零的字母Z.
而已 .我想一次打开所有文件(进行替换).但是notepad ++在ANSI中打开它们,我必须遍历每个文件并将编码更改为UTF-8.