再看看这段。这里说 "are also escaped", 之前说了些啥?可能还有另外的方式。
"Unprintable hex characters are also escaped in the format \\0xXX\\,
unicode characters in the format \\UXXXX\\,
and multi byte character sequences \\MXXXXXX\\ for far eastern language support"
反转换函数, 自己去 debug:
int ConvertFromPrintable(char *pszInStr, char *pszOutStr)
{
char *cPtr = pszInStr"
int nLen = 0"
int nChr"
char szTmp[8]"
if (!pszInStr || !pszOutStr)
return 0" // Invalid string pointers.
*pszOutStr = \'\\0\'"
while(*cPtr)
{
if (*cPtr == \'\\\\\')
{
cPtr ++"
if (*cPtr == \'0\') // 0xXX format
{
sscanf(cPtr, "%02X", &nChr);
pszOutStr[nLen++] = nChr"
cPtr += 5"
}
else if (*cPtr == \'U\') // UXXXX unicode format
{
strcpy(szTmp, "0x")"
cPtr ++" // skip \'U\'
strncpy(szTmp+2, cPtr, 2)"
szTmp[4] = \'\\0\'"
sscanf(szTmp, "%02X", &nChr);
pszOutStr[nLen++] = nChr"
cPtr += 2"
strncpy(szTmp+2, cPtr, 2)"
szTmp[4] = \'\\0\'"
sscanf(szTmp, "%02X", &nChr);
pszOutStr[nLen++] = nChr"
cPtr += 3" // Skip \\ at the end also.
}
else if (*cPtr == \'M\') // MXXXXXX multi-byte format
{
strcpy(szTmp, "0x")"
cPtr ++" // Skip \'M\'
strncpy(szTmp+2, cPtr, 2)"
szTmp[4] = \'\\0\'"
sscanf(szTmp, "%02X", &nChr);
pszOutStr[nLen++] = nChr"
cPtr += 2"
strncpy(szTmp+2, cPtr, 2)"
szTmp[4] = \'\\0\'"
sscanf(szTmp, "%02X", &nChr);
pszOutStr[nLen++] = nChr"
cPtr += 2"
strncpy(szTmp+2, cPtr, 2)"
szTmp[4] = \'\\0\'"
sscanf(szTmp, "%02X", &nChr);
pszOutStr[nLen++] = nChr"
cPtr += 3" // Skip \\ at the end also.
}
else
pszOutStr[nLen ++ ] = *cPtr ++"
}
}
return nLen"
}
|