正如您所指出的那樣,Normalize
method不適用於Windows商店應用程序上的String
class。
但是,這只是在Windows API中調用NormalizeString
function。
更好的是,這個功能在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();
'字符串正常工作的唯一途徑.Normalize'依賴於normaliz.dll中內置的本地函數。我挖了一下,發現它使用[NormalizeString](http://msdn.microsoft.com/en-us/library/windows/desktop/dd319093(v = vs.85).aspx)函數。由於它特定於Windows,因此它不適用於Windows應用商店應用。不幸的是,我對替代品毫無所知。 – 2013-02-10 15:35:02
@AlexanderManekovskiy你錯了,[NormalizeString'在Win32和COM API函數的批准列表中可用於Windows應用商店應用程序](http://msdn.microsoft.com/en-us/library/windows/apps/hh452772 )。 – casperOne 2013-03-08 12:20:20
@casperOne哇,我的眼睛在哪裏?!感謝您指出此列表。 – 2013-03-08 14:36:45