如何在 C# 中规范化外观精美的 unicode 字符串?
How to normalize fancy-looking unicode string in C#?
我从 REST API 收到具有这种样式的文本,例如
?
?
нσω тσ яємσνє тнιѕ ƒσηт ƒяσм α ѕтяιηg?
但这不是斜体、粗体或下划线,因为它的类型是字符串。
这种文本使我的正则表达式失败 ^[a-zA-Z0-9._]*$
我想规范化在标准字符串中收到的这个字符串,以使我的正则表达式仍然有效。
您可以使用 Unicode 兼容性规范化形式,它使用 Unicode 自己的(有损)字符映射将类似字母的字符(以及其他字符)转换为其简化的等效字符。
在python中,例如:
>>> from unicodedata import normalize
>>> normalize('NFKD',' ')
'How to remove this font from a string'
# EDIT: This one wouldn't work
>>> normalize('NFKD','нσω тσ яємσνє тнιѕ ƒσηт ƒяσм α ѕтяιηg?')
'нσω тσ яємσνє тнιѕ ƒσηт ƒяσм α ѕтяιηg?'
编辑:请注意,这仅适用于文体形式(上标、黑字、填充宽度等),因此您的第三个示例使用非拉丁字符,无法分解为 ASCII。
EDIT2:我没有意识到你的问题是特定于 C# 的,here's the documentation for String.Normalize,它就是这样做的:
string s1 = " "
string s2 = s1.Normalize(NormalizationForm.FormKD)
我从 REST API 收到具有这种样式的文本,例如
?
?
нσω тσ яємσνє тнιѕ ƒσηт ƒяσм α ѕтяιηg?
但这不是斜体、粗体或下划线,因为它的类型是字符串。
这种文本使我的正则表达式失败 ^[a-zA-Z0-9._]*$
我想规范化在标准字符串中收到的这个字符串,以使我的正则表达式仍然有效。
您可以使用 Unicode 兼容性规范化形式,它使用 Unicode 自己的(有损)字符映射将类似字母的字符(以及其他字符)转换为其简化的等效字符。
在python中,例如:
>>> from unicodedata import normalize
>>> normalize('NFKD',' ')
'How to remove this font from a string'
# EDIT: This one wouldn't work
>>> normalize('NFKD','нσω тσ яємσνє тнιѕ ƒσηт ƒяσм α ѕтяιηg?')
'нσω тσ яємσνє тнιѕ ƒσηт ƒяσм α ѕтяιηg?'
编辑:请注意,这仅适用于文体形式(上标、黑字、填充宽度等),因此您的第三个示例使用非拉丁字符,无法分解为 ASCII。
EDIT2:我没有意识到你的问题是特定于 C# 的,here's the documentation for String.Normalize,它就是这样做的:
string s1 = " "
string s2 = s1.Normalize(NormalizationForm.FormKD)