我正在将 uft-8 编码代码从 C# 转换为 C。UFT8 涵盖了从 0x0000 到 0x7FFFFFFF ( http://en.wikipedia.org/wiki/UTF-8 ) 的字符值范围。
C# 文件中的编码函数可以毫无问题地编码例如字符“ñ”。
当我在 VS 2005 的内存窗口中查看这个字符“ñ”时,在我的示例程序中它的十六进制值 FFFFFFF1。但是 Windows-Symbol-table 中的字符“ñ”的十六进制值是 0xF1。
现在,在我的示例程序中,我验证字符串中的字符并找到 UTF-8 的最高范围来确定应该使用哪个 Utf8 编码范围进行编码。
这样的:
"charToAnalyse" is here a character of a string::
{
char utfMode = 0;
char utf8EncoderMode = 0;
if(charToAnalyse >= 0x0000 && charToAnalyse <= 0x007F)
{utfMode =1;}
else if(charToAnalyse >= 0x0080 && charToAnalyse <= 0x07FF)
{utfMode =2;}
else if(charToAnalyse >= 0x0800 && charToAnalyse <= 0xFFFF)
{utfMode =3;}
else if(charToAnalyse >= 0x10000 && charToAnalyse <= 0x1FFFFF)
{utfMode =4;}
else if(charToAnalyse >= 0x200000 && charToAnalyse <= 0x3FFFFFF)
{utfMode =5;}
else if(charToAnalyse >= 0x4000000 && charToAnalyse <= 0x7FFFFFFF)
{utfMode =6;}
...
...
...
if(utfMode > utf8EncoderMode)
{
utf8EncoderMode = utfMode;
}
在这个函数中utfMode=0对于字符'ñ',因为ñ == 0xFFFFFFF1,不能用上面的代码分类。
我的问题在这里: 1) ñ 的值为 0xFFFFFFF1 是真的吗?如果“是”,它如何分类为 UTF8 编码?一个字符的值是否可能大于 U+7FFFFFFF (0x7FFFFFFF)?2)这与“高代理”的“低代理”一词有某种关系吗?
非常感谢,即使这是一个荒谬的问题:)