.net - 如何规范化字符串?

标签 .net string unicode windows-store-apps unicode-normalization

在 .NET 中,您可以使用 String.Normalize() 规范化(NFC、NFD、NFKC、NFKD)字符串并且有一个 Text.NormalizationForm 枚举。

在 .NET for Windows Store Apps 中,两者都不可用。我看过String类和在 System.TextSystem.Globalization命名空间,但一无所获。

我错过了什么吗?如何在 Windows 应用商店应用中规范化字符串?

有谁知道为什么Normalize方法不适用于商店应用程序?

最佳答案

正如您所指出的, Normalize method String class 上不可用在 Windows 商店应用程序上。

然而,这只是调用 NormalizeString function在 Windows API 中。

更好的是,此功能在 the approved list of Win32 and COM API functions usable in Windows Store apps 中.

也就是说,您将做出以下声明:

public enum NORM_FORM 
{ 
  NormalizationOther  = 0,
  NormalizationC      = 0x1,
  NormalizationD      = 0x2,
  NormalizationKC     = 0x5,
  NormalizationKD     = 0x6
};

[DllImport("Normaliz.dll", CharSet = CharSet.Unicode, ExactSpelling = true,
    SetLastError = true)
public static extern int NormalizeString(NORM_FORM NormForm,
    string lpSrcString,
    int cwSrcLength,
    StringBuilder lpDstString,
    int cwDstLength);

然后你可以这样称呼它:
// The form.
NORM_FORM form = ...;

// String to normalize.
string unnormalized = "...";

// Get the buffer required.
int bufferSize = 
    NormalizeString(form, unnormalized, unnormalized.Length, null, 0);

// Allocate the buffer.
var buffer = new StringBuilder(bufferSize);

// Normalize.
NormalizeString(form, unnormalized, unnormalized.Length, buffer, buffer.Length);

// Check for and act on errors if you want.
int error = Marshal.GetLastWin32Error();

关于.net - 如何规范化字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773128/

相关文章:

c# - 如何将 .net 属性应用于返回类型

.net - .net 中是否有读取 XML 注释文档文件的 API

Java:使用 .split 进行重载分隔符(仅使用 charAt() 和 length())

Go:如何找出 rune 的 Unicode 属性?

javascript - 通过javascript转换unicode字符

c# - Unity 中的鼠标弹起与触摸弹起

.net - 为什么 aspnet_client 文件夹在 ASP.NET 4 中重新出现?

c - 当我们在 C 中将字符串文字转换为整数时会发生什么?

java - 如何在 Kotlin 中将字符串拆分为数组?

php - 如何搜索显示为十进制数字字符引用 (NCR) &#xxxxx 的 MySQL 条目?