인코딩 문제인지 파이썬에서 개발했다고 하는 ANSI escape sequences 코드 적용된 장비 접속에서 회신이 제대로 오지 않는 문제로 골머리가 아프다.
PC/노트북용 Putty 에서는 정상적으로 처리되는데 Android 앱에서 구현한 코드로는 특정 명령어는 100% 회신이 오는데, 특정 명령어는 50% 성공율이 발생한다. 문제 해결을 위해서 C++ 유투브 강좌도 열심히 들어보고 있다.
Android NDK 를 이용한 방법으로 해결할 수 있지 않을까 생각과 더불어 NDK 처리 방법을 배우면 유용할 거 같아서다.
아직 문제 해결이 안된 상태인데 인코딩 문제인가 싶어서 관련 내용을 찾아보고 정리해둔다.
인코딩(encoding)은 문자셋을 컴퓨터가 이해할 수 있는 바이트와 매핑하는 규칙이다.
UTF-8은 모든 유니 코드 문자를 나타낼 수있는 멀티 바이트 인코딩이다.
ISO 8859-1은 첫 번째 256 유니 코드 문자를 나타낼 수있는 단일 바이트 인코딩이다.
ASCII(American Standard Code for Information Interchange)는 7비트로 엄격하게 제한되었으며, 표현 가능한 7개의 이진수로 비트 패턴을 사용함을 의미하는데, 10진수로는 0부터 127까지의 범위를 제공한다.
여기에는 32개의 보이지 않는 제어 문자가 있는데, 0부터 31까지의 범위에 있으며, 마지막 제어 문자는 DEL또는 delete이며, 이 제어문자는 127번에 할당되어 있다.
32번 부터 126번 까지는 공백 문자, 문장 부호, 라틴 문자, 숫자와 같은 눈에 보이는 문자로 구성되어 있다.
ASCII의 8번째 비트는 본디 오류 검출을 위한 패리티 비트로 활용했다.
오류 검사를 고려하지 않으면 0으로 그대로 둔다. ASCII에서 각 문자를 단일 바이트로 표현했음을 의미한다.
ㅇ 7 bit 코드 : 0x00 ~ 0x7F 까지 128개
ㅇ 첫 1bit 는 패러티 비트 : 에러 검출 목적
강세부호가 들어간 문자가 있는 다른 유럽어권의 문자를 ASCII 로 의사소통할 수 없어 ISO 8859 표준을 개발했다.
현재 ISO 8859 표준의 15가지 변형 표준이 있다.
ㅇ 8bit 코드 : 0x00 ~ 0xFF 까지 256개
ㅇ ASCII 에서 쓸 수 없는 문자들까지 포함
ㅇ 언어권에 따라 여러가지 변형
ㅇ 서유럽용 IOS-8859-1 을 가장 많이 씀
UTF-8
ㅇ 유니코드 인코딩 방식중 하나
ㅇ 영어는 1byte, 한글은 3byte
https://developer.android.com/training/articles/perf-jni#java 에 "자바 프로그래밍 언어는 UTF-16을 사용한다." 고 나온다. UTF-8 이 아니고???
The ANSI character set, also known as Windows-1252, has become a Microsoft proprietary character set;
it is a superset of ISO-8859-1 with the addition of 27 characters in locations that ISO designates for control codes.
ASCII 가 1byte 인코딩 방식이라고 하면, UTF-8 은 멀티방식 인코딩이지만 영문은 1byte 이므로 동일할 거 같고, ISO-8859-1 인코딩 방식이랑 차이가 없을거 같은 생각이 드는데 맞나??
아무튼 문제 해결을 위한 지식과 코드를 분석해보면서 해결책을 찾아야겠다.
Update : 2019.12.20
해결 결과 : 인코딩 문제가 아니라 흐름제어(Flow Control) 문제였다.