Text 파일 읽기




 WinForm 에서 텍스트 파일을 읽어와서 TextBox 에 출력시켜 주는 기능을 구현했다. 물론 많이 편해졌지만 새로운 사실 몇가지를 알게되어 정리해 본다.


■ 파일 읽기

 파일을 읽기위해 FCL 에서 제공해 주는 기능은 많다. 파일을 Byte 배열로 읽을 수 도 있고 string(문자열) 으로도 읽을 수 있다. 






1. FileStream 클래스를 이용하여 파일을 연다.
FileStream 클래스는 파일에 대해 Stream 을 제공하여 동기 및 비동기 읽기/쓰기 작업을 할 수 있게 도와준다.
cf) MSDN : FileStream 클래스

2. StreamReader
StreamReader 클래스를 이용하여 Stream 을 쉽게 조작할 수 있게 한다. 여기서 주의해야 할 것은 StreamReader 생성자의 Encoding 매개변수 이다.

처음 이 매개변수 값을 System.Text.Encoding.UTF8 로 하였다. 그 결과 영문자를 읽는데는 문제가 없었으나 한글은 깨져서 보인다.



UTF8 이라...  예전 유니코드 공부하면서 나온 단어인데..

UTF8 은 유니코드가 아닌 문자 집합을 유니코드로 인코딩 하는 하나의 방법이다. 이런 방법으로 UTF16, UTF32 가 있다.
UTF8 은 인코딩 방법은 문자에 따라 1, 2, 3, 4Byte 로 인코딩을 수행한다.

그렇다면 StreamReader 생성자에서 Encoding 매개변수가 의미하는 것은 ??
읽을 Stream 이 어떤 인토딩 방법으로 인코딩 되어 있는지 정보를 넘겨주는 것이다.
그래야 Stream 을  우리가 원하는 문자열로 읽을 때 해당 인코딩 방법을 사용하여 우리에게 알려줄게 아닌가.

여기서 또 한가지!! UTF8 로 했을 때 왜 한글이 깨질까??
이건 우리가 읽을 파일에 따라 다르다. 해당 파일이 UTF8로 인코딩 되었다면 UTF8로 읽어도 한글이 제대로 보여질 것이다. 하지만 지금 내 환경은 Windows Vista 에서 작성한 txt 파일을 읽는 것이다. Windows Vista 는 UTF16 을 사용한다. 그러니 UTF8 로 지정해 주니 제대로 읽지 못하는 것.
위와 같이 Default 로 해주면 시스템에 지정된 인코딩 방법을 넘겨주게 된다.



■ 개행 - "\r\n"

 아마 파일의 문자열을 읽어와 TextBox 에 출력시키면 개행이 하나도 적용되어 있지 않을 것이다. TextBox 에서 Text 프로퍼티 말고 AppentText 를 이용해 주었다. "\n" 을 넣어주어도 이상하게 출력이 된다. 정말 기본적인 지식으로 넘어가면,
Windows 는 개행문자를 두개 사용한한다. 바로 "\r\n"





이제 제대로 읽어졌다.





■ 참조

1. About Unicode
2. 멀티바이트 - 유니코드 서로변환 함수 표 [스크랩]
3. 유니코드에 대비한 프로그램을 작성하는 여섯가지 원칙 [스크랩]
Posted by six605
,