Questão Que codificação o MS Windows telnet usa por padrão?


Eu tenho um servidor de telnet que permite ao usuário especificar a codificação de comunicação. O servidor irá então usar essa codificação para comunicação, dado que é suportado.

Eu tentei seguir codificações que todos produziam lixo de caracteres unicode no destino:

  • CP-1252
  • UTF-8
  • Latin1

O servidor também me permite listar toda a codificação junto com ěščřžýáíé caracteres para testar qual deles irá funcionar. Esta é a saída no Windows Telnet:

UTF-8: ─Ť┼í─Ź┼Ö┼ż├Ż├í├ş├ę
ISO-8859-1: ?????řßÝÚ
latin1: ?????řßÝÚ
CP819: ?????řßÝÚ
IBM819: ?????řßÝÚ
iso-ir-100: ?????řßÝÚ
csISOLatin1: ?????řßÝÚ
ISO-8859-15: ?Ę??ŞřßÝÚ
latin9: ?Ę??ŞřßÝÚ
Y~řßÝÚ a
Y~řßÝÚE: a
Y~řßÝÚ
Y~řßÝÚa
Y~řßÝÚE: a
Y~řßÝÚ
System:
Big5-HKSCS:  n????? h q m
Big5: ?????????
Big5-ETen: ?????????
CP950: ?????????
windows-949: ?????????
CP949: ?????????
EUC-KR: ?????????
Shift_JIS: ?????????
SJIS: ?????????
MS_Kanji: ?????????
ISO-2022-JP: ?????????
JIS7: ?????????
EUC-JP: ?????????
GB2312:   ?????
GBK:
CP936:
MS936:
windows-936:
GB18030:    0 8 0 0 0 0 0 6 0 5
hp-roman8: ? ???
roman8: ? ???
csHPRoman8: ? ???
TIS-620: ?????????
ISO 8859-11: ?????????
WINSAMI2: ?  ?
WS2: ?  ?
macintosh: ??????
Apple Roman: ??????
MacRoman: ??????
windows-1258: ??????
CP1258: ??????
windows-1257: ?  ? ???
CP1257: ?  ? ???
windows-1256: ????????
CP1256: ????????
windows-1255: ?????????
CP1255: ?????????
windows-1254: ? ????
CP1254: ? ????
windows-1253: ?????????
CP1253: ?????????
windows-1252: ? ??
CP1252: ? ??
windows-1251: ?????????
CP1251: ?????????
windows-1250:
CP1250:
IBM866: ?????????
CP866: ?????????
csIBM866: ?????????
IBM874: ?????????
CP874: ?????????
IBM850: ?????
CP850: ?????
csPC850Multilingual: ?????
ISO-8859-16: ?  ? ?
iso-ir-226: ?  ? ?
latin10: ?  ? ?
ISO-8859-14: ?????
iso-ir-199: ?????
latin8: ?????
iso-celtic: ?????
ISO-8859-13: ?  ? ???
ISO-8859-10: ?  ?
iso-ir-157: ?  ?
latin6: ?  ?
ISO-8859-10:1992: ?  ?
csISOLatin6: ?  ?
ISO-8859-9: ??????
iso-ir-148: ??????
latin5: ??????
csISOLatin5: ??????
ISO-8859-8: ?????????
ISO 8859-8-I: ?????????
iso-ir-138: ?????????
hebrew: ?????????
csISOLatinHebrew: ?????????
ISO-8859-7: ?????????
ECMA-118: ?????????
greek: ?????????
iso-ir-126: ?????????
csISOLatinGreek: ?????????
ISO-8859-6: ?????????
ISO-8859-6-I: ?????????
ECMA-114: ?????????
ASMO-708: ?????????
arabic: ?????????
iso-ir-127: ?????????
csISOLatinArabic: ?????????
ISO-8859-5: ?????????
cyrillic: ?????????
iso-ir-144: ?????????
csISOLatinCyrillic: ?????????
ISO-8859-4: ?  ? ?
latin4: ?  ? ?
iso-ir-110: ?╣Ŕ?ż?ßÝÚ
csISOLatin4: ?╣Ŕ?ż?ßÝÚ
ISO-8859-3: ??????ßÝÚ
latin3: ??????ßÝÚ
iso-ir-109: ??????ßÝÚ
csISOLatin3: ??????ßÝÚ
ISO-8859-2: ý╣Ŕ°żřßÝÚ
latin2: ý╣Ŕ°żřßÝÚ
iso-ir-101: ý╣Ŕ°żřßÝÚ
csISOLatin2: ý╣Ŕ°żřßÝÚ

Com a massa, funciona claramente e o correto é o UTF-8. Isto é o que eu recebo quando uso putty (eu cortei o resto da longa lista):

UTF-8: ěščřžýáíé
ISO-8859-1: ?????▒▒▒▒
latin1: ?????▒▒▒▒
CP819: ?????▒▒▒▒
IBM819: ?????▒▒▒▒
iso-ir-100: ?????▒▒▒▒
csISOLatin1: ?????▒▒▒▒
ISO-8859-15: ?▒??▒▒▒▒▒
latin9: ?▒??▒▒▒▒▒
Y~▒▒▒▒LE:
Y~▒▒▒▒2BE:

pode ser um problema no servidor, mas para considerar essa possibilidade, primeiro preciso saber qual codificação o Microsoft Telnet Client realmente usa. Qual codificação é essa? É salvo em alguma variável do sistema?


0


origem


Se bem me lembro, provavelmente é ASCII de 7 bits. Se você vir lixo na sua sessão remota, provavelmente é porque você não escolheu uma configuração compatível com o servidor remoto. - Julie Pelletier
@ JuliePelletier Eu preciso saber qual nome de codificação devo passar para o servidor. Se fosse apenas o primeiro caractere ASCII, ele não permitiria símbolos diacríticos. Eu não tenho problemas com o envio e recebimento de símbolos ASCII, apenas os Unicode causam lixo. - Tomáš Zato
No início, pensei que tudo o que você estava recebendo era lixo (resultados indesejáveis ​​/ não-permitidos) e suspeita de erros de configuração de comunicação. Mas então eu vi a saída do PuTTY e percebi que isso poderia não ser aleatório. A saída PuTTY UTF-8 é exatamente o que você esperava ver? Observe que antes do Win10, o Windows Telnet era conhecido por fornecer suporte de terminal muito ruim, exceto pelo texto bruto que não inclui códigos de escape. Eu li a Microsoft planejada para fazer alterações no console no Win10; Ainda não determinei se isso acabaria fazendo o Telnet funcionar melhor do que nas versões anteriores. - TOOGAM
Por RFC854, o dispositivo de caractere Network Virtual Terminal usa caracteres USASCII de 7 bits, em um campo de 8 bits. tools.ietf.org/html/rfc854 Consulte a seção "IMPRESSORA E TECLADO DA NVT" na página 10. - Frank Thomas
Como @FrankThomas aponta no RFC 854, também lista lá: The NVT is intended to strike a balance between being overly restricted (not providing hosts a rich enough vocabulary for mapping into their local character sets), and being overly inclusive (penalizing users with modest terminals). também afirma The code set is seven-bit USASCII in an eight-bit field, except as modified herein. Any code conversion and timing considerations are local problems and do not affect the NVT. dentro O TERMINAL VIRTUAL DE REDE - Pimp Juice IT


Respostas:


O Telnet é codificado em ASCII - existe um modo de oito bits que pode ser negociado, que é normalmente usado para transferências de dados.


1



Você poderia elaborar por favor? Existe algum documento descrevendo como usar os oito bits para enviar caracteres Unicode? - Tomáš Zato