想要强制下载资源而不是直接在Web浏览器中呈现资源的Web应用程序Content-Disposition在表单的HTTP响应中发出标头:
Content-Disposition: attachment; filename=FILENAME
该filename参数可用于建议浏览器下载资源的文件的名称.但是,RFC 2183(Content-Disposition)在2.3节(文件名参数)中指出文件名只能使用US-ASCII字符:
当前[RFC 2045]语法将参数值(以及因此内容处理文件名)限制为US-ASCII.我们认识到允许在文件名中使用任意字符集的巨大愿望,但是定义必要的机制超出了本文档的范围.
然而,有经验证据表明,当今大多数流行的Web浏览器似乎都允许非US-ASCII字符(缺乏标准)对编码方案和文件名的字符集规范不同意.问题是,如果文件名"naïvefile"(没有引号,第三个字母是U + 00EF)需要编码到Content-Disposition标题中,那么流行浏览器采用的各种方案和编码是什么?
出于这个问题的目的,流行的浏览器是:
问题是,如你所知,Unicode图表中有数千个字符,我想将所有相似的字符转换为英文字母中的字母.
例如,这里有一些转换:
?->H
?->V
?->Y
?->O
?->C
t?? ?????y --> the Family
...
Run Code Online (Sandbox Code Playgroud)
我看到有超过20个版本的字母A/a.而且我不知道如何对它们进行分类.它们看起来像大海捞针.
完整的unicode字符列表位于http://www.ssec.wisc.edu/~tomw/java/unicode.html 或http://unicode.org/charts/charindex.html.只需向下滚动即可看到字母的变化.
如何用Java转换所有这些?请帮我 :(
所以我搜索并浏览了SO上的slug标签,发现了两个引人注目的解决方案:
这只是部分解决问题的方法.我可以自己手动编写代码,但我很惊讶还没有解决方案.
那么,在C#和/或.NET中是否有一个slugify alrogithm实现正确解决了拉丁字符,unicode和其他各种语言问题?

上面描绘的角色是几个月前由计算机安全专家MikkoHyppönen发推的,他以计算机病毒和TED谈论计算机安全而闻名.关于SO,我只会发布它的图像,但你明白了.这显然不是你想要在你的网站上传播并吓跑游客的东西.
经过进一步检查,该字符似乎是一个泰语字母和超过87个变音符号的字母(是否有限制?!).这让我想到了安全性,本地化以及如何处理这种输入.我的搜索引导我在Stack上提出这个问题,然后是迈克尔卡普兰关于剥离变音符号的博客文章.在其中,他演示了如何将字符串分解为其"基本"字符(为简洁起见,此处简化):
StringBuilder sb = new StringBuilder();
foreach (char c in "façade".Normalize(NormalizationForm.FormD))
{
if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
sb.Append(c);
}
Response.Write(sb.ToString()); // facade
Run Code Online (Sandbox Code Playgroud)
我可以看到这在某些情况下是如何有用的,但就用户输入而言,它将剥离所有变音符号.正如卡普兰指出的那样,删除一些语言中的变音符号可以完全改变单词的含义.这引出了一个问题:如何在用户输入/输出中允许一些变音符号,但排除其他极端情况,例如MikkoHyppönen的超级字符?
我需要做以下事情:
static string[] pats = { "å", "Å", "æ", "Æ", "ä", "Ä", "ö", "Ö", "ø", "Ø" ,"è", "È", "à", "À", "ì", "Ì", "õ", "Õ", "ï", "Ï" };
static string[] repl = { "a", "A", "a", "A", "a", "A", "o", "O", "o", "O", "e", "E", "a", "A", "i", "I", "o", "O", "i", "I" };
static int i = pats.Length;
int j;
// function for the replacement(s)
public string DoRepl(string Inp) {
string tmp = Inp;
for( j = 0; j < …Run Code Online (Sandbox Code Playgroud) 我正在寻找伪代码或示例代码,以将更高位的ascii字符(例如,将其扩展为ascii 154)转换为U(ascii 85).
我最初的猜测是,由于只有大约25个ascii字符与7bit ascii字符类似,因此必须使用翻译数组.
如果您能想到其他任何事情,请告诉我.
我正在使用此方法从我的字符串中删除重音:
static string RemoveAccents(string input)
{
string normalized = input.Normalize(NormalizationForm.FormKD);
StringBuilder builder = new StringBuilder();
foreach (char c in normalized)
{
if (char.GetUnicodeCategory(c) !=
UnicodeCategory.NonSpacingMark)
{
builder.Append(c);
}
}
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是这个方法使đ为đ,并且不会将其更改为d,即使d是其基本字符.您可以使用此输入字符串"æøåáâăäĺćçčéęěěîďđńňóôőöřůúűüýţ"进行尝试
字母đ中有什么特别之处?
我们的一些用户使用无法处理Unicode的电子邮件客户端,即使在邮件头中正确设置了编码等.
我想"规范化"他们收到的内容.我们遇到的最大问题是用户将来自Microsoft Word的内容复制到我们的Web应用程序中,然后通过电子邮件转发该内容 - 包括分数,智能引号以及Word为您帮助插入的所有其他扩展Unicode字符.
我猜这里没有明确的解决方案,但在我坐下来开始编写伟大的查找表之前,是否有一些内置的方法可以让我开始?
基本上涉及三个阶段.
首先,从其他正常字母中删除重音 - 解决方案就在这里
This paragraph contains “smart quotes” and áccénts and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
去
This paragraph contains “smart quotes” and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
其次,用它们的ASCII等效替换单个Unicode字符,给出:
This paragraph contains "smart quotes" and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
在我实现自己的解决方案之前,这是我希望有解决方案的部分.最后,使用合适的ASCII序列替换特定字符 - ½到1/2,依此类推 - 我很确定任何类型的Unicode魔法本身都不支持,但是有人可能已经写了一个合适的查找表我可以再利用.
有任何想法吗?
我在C++中有一个字符串的问题,它有几个西班牙语单词.这意味着我有很多带有重音符号和波浪号的单词.我想替换他们没有重音的同行.示例:我想替换这个词:哈比亚的"había".我尝试直接替换它,但使用字符串类的替换方法,但我无法让它工作.
我正在使用此代码:
for (it= dictionary.begin(); it != dictionary.end(); it++)
{
strMine=(it->first);
found=toReplace.find_first_of(strMine);
while (found!=std::string::npos)
{
strAux=(it->second);
toReplace.erase(found,strMine.length());
toReplace.insert(found,strAux);
found=toReplace.find_first_of(strMine,found+1);
}
}
Run Code Online (Sandbox Code Playgroud)
dictionary这样的地图在哪里(有更多条目):
dictionary.insert ( std::pair<std::string,std::string>("á","a") );
dictionary.insert ( std::pair<std::string,std::string>("é","e") );
dictionary.insert ( std::pair<std::string,std::string>("í","i") );
dictionary.insert ( std::pair<std::string,std::string>("ó","o") );
dictionary.insert ( std::pair<std::string,std::string>("ú","u") );
dictionary.insert ( std::pair<std::string,std::string>("ñ","n") );
Run Code Online (Sandbox Code Playgroud)
和toReplace字符串是:
std::string toReplace="á-é-í-ó-ú-ñ-á-é-í-ó-ú-ñ";
Run Code Online (Sandbox Code Playgroud)
我显然必须遗漏一些东西.我无法弄清楚.有没有我可以使用的图书馆?
谢谢,
我有以下字符串
áéíóú
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为
aeiou
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现它?(我不需要比较,我需要新的字符串来保存)
不重复如何从.NET中的字符串中删除变音符号(重音符号)?.那里接受的答案没有解释任何事情,这就是为什么我"重新开启"它.
c# ×5
.net ×3
diacritics ×3
unicode ×3
ascii ×2
string ×2
browser ×1
c++ ×1
codepages ×1
http-headers ×1
java ×1
normalize ×1
regex ×1
slug ×1
str-replace ×1
text ×1
user-input ×1
zalgo ×1