TIL - 콘솔 쇼핑몰 (24.10.29)
## 1. 입력이 정상적으로 되지 않는 현상
import 'dart:io';
... // main
String? input = stdin.readLineSync();
print(input);
개발 환경은 vscode를 이용해 dart 코드를 구동중이었으며, 입출력을 받는 코드를 작성하는 도중에 오류가 발생하였다.
< 원인 >
VSCode의 디버그 콘솔이 C++ 프로그램의 입출력을 지원하지 않기 때문이었다.
< 해결법 >
vscode 내부 콘솔을 사용하는것이 아니라, 터미널이나 외부 콘솔을 사용하면 정상적으로 입출력 되는 것을 볼 수 있었다.
## 2. 한글입력이 정상적으로 되지 않는 현상
개발 환경은 vscode를 이용해 dart 코드를 구동중이었으며, 상품명을 입력받는 코드를 작성하는 도중에 오류가 발생하였다.
import 'dart:io';
... // main
String? input = stdin.readLineSync(); // 입력 : 셔츠
print(input); // 출력 : @
영어나 숫자 입력에는 정상적으로 작동하는데, 한글 입력만 이상하게 입력된다.
< 원인 >
구글링 결과 한글 입력시의 유니코드 관련 문제라는 것을 알았다.
< 해결법 >
- Try 1 : 코드상 입력시 UTF-8 입력으로 제한하여 입력이 되도록 해보자!
// 키보드 입력방식을 utf-8 방식으로 제한한다.
import 'dart:convert';
stdin.readLineSync(encoding: Encoding.getByName('utf-8')!);
.. 전혀 해결되지 않았다..
- Try 2 : vscode 환경이 아니라, Window 환경의 터미널 (PowerShell) 에서 실행해보자
..Windows PowerShell을 관리자 권한으로 직접 켜서 실행해 봤는데도 정상작동 하지 않았다..
- Try 3 : chcp 65001 명령어는 명령 프롬프트나, PowerShell 에서 코드 페이지를 UTF-8(코드 페이지 65001)로 설정하는 명령어이다. 해당 명령어를 사용하면, 일시적이지만 제대로 입력이 될지도 모른다!
.. 여전히 입력이 제대로 되질 않았다..
- Try 4 : 비슷한 사례가 있어서 Windows 제어판의 '국가 또는 지역' 부분을 건드려 봤다.
[C, C++] 한글 입출력(printf, scanf) 시 오류가 날 때 해결 방법
위 사진이 뭐냐면, 위에서 이름, 나이, 취미를 입력받고 아래에서 입력받은 내용을 출력하는 코드를 실행한 결과이다. 그런데 결과가 이상하다. 띠용! 보다시피 입력부분이 정상적으로 출력되지
seoyyeong.tistory.com
.. 결론적으로는 해당사항이 아니었던것 같다.. UTF-8 다 되어 있고, Beta 체크도 안되어 있었다. (혹시될까봐 껏다켰다 해봤기도 함)
< 결단 >
일단 해결이 되지 않는 관계로..
한글이 들어가야 했던 Product의 name 부분을 영어로 교체하였다.
items = [
Product('shirt', 45000), // 셔츠
Product('dress', 30000), // 원피스
Product('sleeves', 35000), // 반팔티
Product('shorts', 38000), // 반바지
Product('socks', 5000), // 양말
];
// 다른 환경에서는 정상적으로 처리되는바, 원래 코드로 다시 변환시켰다.
items = [
Product('셔츠', 45000), // 셔츠, shirt
Product('원피스', 30000), // 원피스, dress
Product('반팔티', 35000), // 반팔티, sleeves
Product('반바지', 38000), // 반바지, shorts
Product('양말', 5000), // 양말, socks
];
++ 추가
대여한 MacBook Air (M2) 가 와서, Mac 환경에서 다시 실행해 본 결과, 정상적으로 출력 및 처리되는 것을 알 수 있었다.
따라서 데스크탑의 인코딩 문제인듯..