是否有一种简单的方法来指定所有"普通"视图是一个ASP.NET MVC应用程序要charset=utf-8
附加到Content-Type
? View()
缺乏一个覆盖,它允许您指定Content-Type
,并ActionResult
和朋友们似乎并没有暴露任何事情,无论是.很明显,动机可以解决Internet Explorer猜测"正确"编码类型的问题,而我希望这样做可以避免UTF-7 XSS攻击.
我想知道Python中是否有任何"官方"函数/库用于IMAP4 UTF-7文件夹路径编码.
在imapInstance.list()
我得到以下路径IMAP UTF-7编码:
'(\\HasNoChildren) "." "[Mails].Test&AOk-"',
Run Code Online (Sandbox Code Playgroud)
如果我执行以下编码:
(u"[Mails].Testé").encode('utf-7')
Run Code Online (Sandbox Code Playgroud)
我明白了:
'[Mails].Test+AOk-'
Run Code Online (Sandbox Code Playgroud)
哪个是UTF-7而不是IMAP UTF-7编码.Test+AOk-
而不是Test&AOk-
我需要一个官方函数或库来获得IMAP UTF-7编码版本.
IMAP 规范(RFC 2060,5.1.3。邮箱国际命名约定)描述了如何处理文件夹名称中的非 ASCII 字符。它定义了经过修改的UTF-7 编码:
按照惯例,国际邮箱名称使用 [UTF-7] 中描述的 UTF-7 编码的修改版本指定。这些修改的目的是纠正 UTF-7 的以下问题:
UTF-7 使用“+”字符进行移位;这与邮箱名称中常用的“+”冲突,尤其是 USENET 新闻组名称。
UTF-7 的编码是 BASE64,它使用“/”字符;这与使用“/”作为流行的层次结构分隔符相冲突。
UTF-7 禁止“\”的未编码使用;这与使用“\”作为流行的层次结构分隔符相冲突。
UTF-7 禁止“~”的未编码使用;这与在某些服务器中使用“~”作为主目录指示符相冲突。
UTF-7 允许多种替代形式来表示同一个字符串;特别是,可打印的 US-ASCII 字符可以以编码形式表示。
在修改后的 UTF-7 中,除“&”之外的可打印 US-ASCII 字符代表它们自己;也就是说,八位字节值为 0x20-0x25 和 0x27-0x7e 的字符。字符“&”(0x26)由两个八位字节序列“&-”表示。
所有其他字符(八位字节值 0x00-0x1f、0x7f-0xff 和所有 Unicode 16 位八位字节)都以修改后的 BASE64 表示,[UTF-7] 进一步修改为使用“,”而不是“/”。
修改后的 BASE64 不得用于表示任何可以表示其自身的打印 US-ASCII 字符。"&" 用于转换到修改后的 BASE64 和 "-" 用于转换回 US-ASCII。所有名称都以 US-ASCII 开头,并且必须以 US-ASCII 结尾(即以 Unicode 16 位八位字节结尾的名称必须以“-”结尾)。
在我开始实现它之前,我的问题是:是否有一些.NET 代码/库(甚至在框架中)可以完成这项工作?我找不到 .NET 资源(仅适用于其他语言/框架的实现)。
谢谢!
如果我有一串UTF-8字符,并且需要以UTF-7的形式输出到旧系统,我有两个与此有关的问题.
如何将具有UTF-8字符的字符串s转换为没有这些字符的相同字符串?
是否有任何简单的转换扩展字符,如'?' 他们最接近的非延伸等价'O'?
我在磁盘上有一个由程序写入的文件,其中一些数据以 Json 编码。
我正在使用 C# 的 File.ReadAllText(string path, Encoding encoding) 稍后读取它。由于无关的原因,我们必须使用 UTF-7。
我们的行看起来像这样:
var content = File.ReadAllText(fileName, Encoding.UTF7);
Run Code Online (Sandbox Code Playgroud)
它工作正常,先写后读,基本上我们需要的一切。唯一的例外是加号 (+)。如果我们的文件中有 + 号,此代码将返回整个字符串,忽略所有这些。所以
{ "commandValue": "testvalue + otherValue" }
Run Code Online (Sandbox Code Playgroud)
变成
{ "commandValue": "testvalue otherValue" }
Run Code Online (Sandbox Code Playgroud)
我检查了文件字节,+ 号确实是 char 0x2B,这是 UTF-7 中的正确字符(也是 UTF-8 中的相同字符,不确定是否重要)。
我无法弄清楚为什么它们在阅读时消失了。
为了测试,我试着用
var content = File.ReadAllText(fileName, Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
它工作正常。字符没有消失。
我可能做错了什么,我怎么能让 File.ReadAllText(fileName, Encoding.UTF7) 不忽略这些字符?
到目前为止,我还没有发现另一个有这个问题的字符,但我显然没有测试所有的字符。
我想仔细检查一下并相信这对其他人会有帮助。如果有人在代码中使用 htmlspecialchars($var) 并运行 5.4 之前的 PHP 版本,那么他们就会对 utf-7 XSS 持开放态度。这是既定的。即使标头内容字符集是 utf-8,我是否正确假设该网站仍对 utf-7 XSS 开放,因为 PHP 的服务器内容字符集默认为 iso-8859-1?
编辑:有人问我希望从中获利什么。我希望确保项目不会受到 utf-7 的影响,因为有些程序员似乎不倾向于设置 htmlspecialchars 的第三个参数,即字符集。如果您了解我提到的服务器字符集以及它如何适合 utf-7,那么我真的需要您的帮助。