如何将土耳其字符转换为ASCII?(如ş
到s
)
我试着更换,但它没有做任何事情。下面是我的代码:
$posta = $posta.ToLower()
$posta = $posta -replace "ü","u"
$posta = $posta -replace "ı","i"
$posta = $posta -replace "ö","o"
$posta = $posta -replace "ç","c"
$posta = $posta -replace "ş","s"
$posta = $posta -replace "ğ","g"
$posta = $posta.trim()
write-host $posta
如果$posta
是eylül
,则返回eylül
2条答案
按热度按时间sxissh061#
这个答案的所有学分与同一答案中的评论相结合,该答案显示了通过过滤不是
NonSpacingMark
的字符,然后用i
替换ı
的适当方法。答案是在c#中,因此分享如何在powershell中完成。原始答案使用
Enumerable.Where
,在PowerShell中看起来像这样:然而,Linq语法在PowerShell中非常麻烦,因为这些不是extension methods,我们需要直接调用API。一个相对简单的方法是使用
.Where
intrinsic方法:使用
-replace
运算符的简化regex方法,感谢mklement0的提示:请参阅Unicode类别或Unicode块:
\p{}
详细信息。lmyy7pcs2#
使用 PowerShell(Core)7+ 替代方案补充Santiago Squarzon's helpful answer,该替代方案基于this helpful answer中的指导,解释了土耳其字母表中有一组固定的12个字符,它们具有等效的ASCII字符:
ı
处理。下面的解决方案 * 特定于土耳其字母 *(区分大小写;它可以容易地被修改为大小写不敏感/全小写)。该解决方案依赖于基于regex的
-replace
运算符的PowerShell(Core)7+功能,即传递script block({ ... }
)作为替换操作数的选项,这使得能够基于每个报告的匹配($_.Value
)通过算法确定替换值。