我正在尝试转换一些法语加拿大语的字符串,基本上,我希望能够在保留字母的同时取出字母中的法语重音符号.(例如转换é为e,所以crème brûlée会变成creme brulee)
实现这一目标的最佳方法是什么?
上传文件到Azure Blob Storage与原来的文件名,并指定文件名作为meta-data该CloudBlob
这些字符是不允许的,meta-data但可以接受为blob名称:
š Š ñ Ñ ç Ç ÿ Ÿ ž Ž Ð œ Œ « » éèëêð ÉÈËÊ àâä ÀÁÂÃÄÅ àáâãäå ÙÚÛÜ ùúûüµ òóôõöø ÒÓÔÕÖØ ìíîï ÌÍÎÏ
Run Code Online (Sandbox Code Playgroud)
meta-data?我们是否遗漏了一些导致此异常的设置?blob和meta-data命名约定,但没有关于数据本身!var dirtyFileName = file.FileName;
var normalizedFileName = file.FileName.CleanOffDiacriticAndNonASCII();
// Blob name accepts almost characters that are acceptable as filenames in Windows
var blob = container.GetBlobReference(dirtyFileName);
//Upload content to …Run Code Online (Sandbox Code Playgroud) 问题:我有两个来自外部系统的固定宽度字符串.第一个包含基本字符(如az),第二个(MAY)包含要附加到第一个字符串以创建实际字符的变音符号.
string asciibase = "Dutch has funny chars: a,e,u";
string diacrits = " ' \" \"";
//no clue what to do
string result = "Dutch has funny chars: á,ë,ü";
Run Code Online (Sandbox Code Playgroud)
我可以写一个大规模的搜索并替换所有字符+不同的变音符号,但希望更优雅的东西.
有人知道如何解决这个问题吗?尝试计算小数值,使用string.Normalize(c#),但没有结果.谷歌也没有真正想出办法.
我在使用 unicode 字符搜索文件名时遇到问题。这些文件可能具有正确或更改的名称(替换为等效的 ascii 字符)。\n我想编写一些代码来查找使用相同单词(无论更改与否)的文件,并且同一字符串内可能存在不连贯的文化混合。\n为了保留它简单,我应该只管理欧洲语言的字符串。
\n\n等价示例:
\n\n\xc6\x90psilon <=> epsilon\nK\xc3\xb8benhavn <=> Kobenhavn\n\xc3\x85ngstr\xc3\xb6m <=> Angstrom\nEl Ni\xc3\xb1o <=> El Nino\nTi\xe1\xba\xbfng Vi\xe1\xbb\x87t <=> Tieng Viet\n\xc4\x8ce\xc5\xa1tina <=> Cestina\nencyklop\xc3\xa6di <=> encyklopaedi\nExpedi\xc8\x9bia <=> Expeditia\n\xc3\xb8\xc3\xb0rum <=> odrum\n\xc5\x93uf <=> oeuf\n\xce\xbc (\\u03bc) <=> \xc2\xb5 (\\u00b5)\nStra\xc3\x9fe <=> Strasse\nRun Code Online (Sandbox Code Playgroud)\n\n我已经找到了类似问题的一些答案,但它们基于更简单的字符串(其中删除重音就足够了,使用 Unicode 规范化和删除变音符号),或基于“自己动手”。
\n\n\n\n如何将 Unicode 字符转换为其等效的 ASCII 字符
\n\n\n\n不幸的是,Unicode 规范化(自动方式)至少对以下字符不起作用:
\n\n\xc6\x90 \xc3\xb8 \xc3\xb0 => missing equivalence\n\xc3\xa6 \xc5\x93 \xc3\x9f => missing expansion\nRun Code Online (Sandbox Code Playgroud)\n\n除了我自己手动转换每个“众所周知”字符之外,是否有一个函数/库可以在 C# 中实现此目的?
\n我创建了一个函数,将变音字符转换为非变音字符(基于这篇文章)
这是代码:
Public Function RemoveDiacritics(ByVal searchInString As String) As String
Dim returnValue As String = ""
Dim formD As String = searchInString.Normalize(System.Text.NormalizationForm.FormD)
Dim unicodeCategory As System.Globalization.UnicodeCategory = Nothing
Dim stringBuilder As New System.Text.StringBuilder()
For formScan As Integer = 0 To formD.Length - 1
unicodeCategory = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(formD(formScan))
If unicodeCategory <> System.Globalization.UnicodeCategory.NonSpacingMark Then
stringBuilder.Append(formD(formScan))
End If
Next
returnValue = stringBuilder.ToString().Normalize(System.Text.NormalizationForm.FormC)
Return returnValue
End Function
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于String.Normlize不是Silverlight的一部分,我需要找到另一种编写此函数的方法.
到目前为止我找到的唯一解决方案是在服务器端创建一个服务,该服务将调用String.Normalize函数,然后将其返回给客户端...但这会产生巨大的性能问题.
必须有一个更好的选择但正确知道我不知道如何解决这个问题.
ascii ×2
c# ×2
diacritics ×2
string ×2
.net ×1
azure ×1
localization ×1
normalize ×1
silverlight ×1
unicode ×1