请问微软的.NET开发工具能否处理32位编码的Unicode字符?(100分)

  • 主题发起人 主题发起人 SparkV
  • 开始时间 开始时间
S

SparkV

Unregistered / Unconfirmed
GUEST, unregistred user!
刚试了一下Delphi 2006的“VCL Forms Application - Delphi for .NET”,发现虽然它的string数据类型已经是Unicode的了,而且VCL控件里面的文本也是Unicode的了。但它仍然只支持16位编码的Unicode,没有办法处理32位Unicode字符。
请问如果用微软的.NET开发工具的话,它是否提供了处理32位Unicode字符/字符串的数据类型呢?请用过微软.NET开发工具的朋友帮忙看看呀。
 
微软在VS.net2005中才加入了处理32位编码的Unicode字符的类库,
.NET之前的版本我没见有对它的支持。
//*****************************************************************************
UTF32Encoding Class
[此帮助主题属于 Visual Studio 预发布版的文档,以后正式发布时可能会有改动。空的帮助主题作为占位符包含在内。]
Note: This class is new in the .NET Framework version 2.0.
Represents a UTF-32 encoding of Unicode characters.
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
//*****************************************************************************
using System;
using System.Text;
public class SamplesUTF32Encoding {
public static void Main() {
// Create an instance of UTF32Encoding using little-endian byte order.
// This will be used for encoding.
UTF32Encoding u32LE = new UTF32Encoding( false, true );
// Create two instances of UTF32Encoding using big-endian byte order: one with error detection and one without.
// These will be used for decoding.
UTF32Encoding u32withED = new UTF32Encoding( true, true, true );
UTF32Encoding u32noED = new UTF32Encoding( true, true, false );
// Create byte arrays from the same string containing the following characters:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
String myStr = "za/u0306/u01FD/u03B2/uD8FF/uDCFF";
// Encode the string using little-endian byte order.
byte[] myBytes = new byte[u32LE.GetByteCount( myStr )];
u32LE.GetBytes( myStr, 0, myStr.Length, myBytes, 0 );
// Decode the byte array with error detection.
Console.WriteLine( "Decoding with error detection:" );
PrintDecodedString( myBytes, u32withED );
// Decode the byte array without error detection.
Console.WriteLine( "Decoding without error detection:" );
PrintDecodedString( myBytes, u32noED );
}

// Decode the bytes and display the string.
public static void PrintDecodedString( byte[] bytes, Encoding enc ) {
try {
Console.WriteLine( " Decoded string: {0}", enc.GetString( bytes, 0, bytes.Length ) );
}
catch ( System.ArgumentException e ) {
Console.WriteLine( e.ToString() );
}
Console.WriteLine();
}
}
 
谢谢网事如风,我再详细了解一下。虽然我向来不太喜欢微软的开发工具,但如果真的只有它能处理32位Unicode的话,也只有用住先啦。
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部