4

我使用 read 函数从 TCP 套接字读取了一些文本(已知在 ISO-8859-1 中),然后我做了一些基本的子字符串替换。最后,我想将字符串转换为 GSM 等效项。

最好(但不一定)我会做这样的事情:

size_t i;
for (i=0; i<size; i++) {
  switch (string[i]) {
    case 65:
      //Convert this character
    case 163:
      //Convert this character (the pound symbol £)
  }
}

我更喜欢 switch 的可读性,但也考虑了 if-else 语句。

这适用于普通的 ASCII 字符,但 ISO-8859-1 的顶部给我带来了各种问题。显然,它们被视为多个字符。任何有关如何进行转换的帮助将不胜感激。

4

1 回答 1

4

在您的情况下char似乎已签署。您可以使用 char 文字并使用 ASCII 127 以外的 char 值的符号来规避整个问题:

/* ascii: */
case '\000': /* U+0000 - nul */
...    
/* extended ascii: */
case '\200': /* U+0080 - non-printable control character */
...
case '\243': /* U+00A3 - sterling pound */
...
case '\377': /* U+00ff - lower case y with dieresis */

但是,通过在数组中查找来实现转换可能更有效。

如果您输入的“扩展 ASCII”部分表示为多个字符,则您的输入很可能实际上是用 UTF-8 或类似的东西编码的。

于 2012-10-16T13:03:28.097 回答