출처 : http://blog.naver.com/sorkelf?Redirect=Log&logNo=40158854917
C#은 기본적으로 UTF-8 방식으로 인코딩 한다
(일반적인 문자들(숫자,영어등)을 사용할 거면 상관없지만.. 그 외 다른 나라 언어라던지..)
using System; using System.Collections.Generic;using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //FileStream 생성 후 출력 FileStream fileStreamOutput = new FileStream(strFileName, FileMode.Create); //파일포인터 처음으로.. fileStreamOutput.Seek(0, SeekOrigin.Begin); WriteString("한글문자 출력", fileStreamOutput); WriteString("桜蘭高校ホスト部 高杉晋助", fileStreamOutput); WriteString("您好,见到您很高兴", fileStreamOutput); fileStreamOutput.Flush(); fileStreamOutput.Close(); ReadString(); } //File Read public static void ReadString() { byte[] byteArray = new byte[MAX_BTYE]; FileStream fileStreamInput = File.OpenRead(strFileName); UTF8Encoding utf8Encoding = new UTF8Encoding(true); //File Read while (fileStreamInput.Read(byteArray, 0, byteArray.Length) > 0) { str += utf8Encoding.GetString(byteArray); } //Console.WriteLine(str); fileStreamInput.Close(); } //File Write public static void WriteString(String str, FileStream fs) { byte[] info; //Use UTF-8 ? if(_USE_UTF8_INCODING) info = new UTF8Encoding(true).GetBytes(str); else info = System.Text.Encoding.Default.GetBytes(str); fs.Write(info, 0, info.Length); } private const int MAX_BTYE = 1024; private static string str; private static string strFileName = "test.txt"; private const bool _USE_UTF8_INCODING = true; } } |
info = System.Text.Encoding.Default.GetBytes(str);
에서 System.Text.Encoding.Default는 현재 사용중인 운영체제의 ANSI Code Page를 의미한다(ASCII와 다름)
뭐 한국어 윈도우니까 한국어는 깨지지 않겠지만 일본어나 중국어등은 깨져서 나올것이다
(물론 일본 윈도우에 한국어도 깨지듯이 나오듯..)
아래는 UTF8Encoding 클래스..
UTF8Encoding 클래스.NET Framework 4 |
byte[] defaultBytes = Encoding.Default.GetBytes( text ); byte[] utf8Bytes = Encoding.Convert( Encoding.Default, Encoding.UTF8, defaultBytes );string resultString = Encoding.UTF8.GetString( utf8Bytes ); ; |
어디까지나 이것은 C#에서 가능한 것이며 (ATL 헬퍼 함수들을 사용하면 가능..)
이러한 변환을 C++에서 할 수 있도록 하는 것은 아래에 링크를 참조하길..
http://www.gamedevforever.com/57 <- 놀개영
추가 .. : ATL은 요런게 있음..
void foo( const char *in, char *out, int nOut ) {USES_CONVERSION; wchar_t *wc = A2W( in ); // ANSI to UCS-2 WideCharToMultiByte( CP_UTF8, 0, wc, -1, out, nOut, 0, 0 ); // UCS-2 to UTF-8 } |
USES_CONVERSION하고 A2W을요 놈이 ATL 관련 함수이다
반대로 변환할 떄는 MultiByteToWideChar ()와 W2A를 사용하면 된다
ANSI나 UTF-8이나 다 MultiByte 이며.
A2W는 내부적으로 MultiByteToWideChar를,
W2A는 내부적으로 WideCharToMultiByte를 호출한다.
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5