상세 컨텐츠

본문 제목

[C#] 문자열 <-> 바이트(byte) 상호변환 그리고 문자열 인코딩(EncodingInfo.GetEncoding Method) 관련

본문

반응형

 

 

=================================

=================================

=================================

 

 

 

출처: https://docs.microsoft.com/ko-kr/dotnet/api/system.text.encodinginfo.getencoding?view=netframework-4.7.2

 

 

EncodingInfo.GetEncoding Method

 

현재 Encoding 개체에 해당하는 EncodingInfo 개체를 반환합니다.

C#
public System.Text.Encoding GetEncoding ();

반환

현재 Encoding 개체에 해당하는 EncodingInfo 개체입니다.

예제

다음 코드 예제에서는 각 인코딩에 다른 이름을 검색 하 고 해당 하는 비교 Encoding 이름입니다.

C#
using System; using System.Text;  public class SamplesEncoding  {     public static void Main()  {        // Print the header.       Console.Write( "Info.CodePage      " );       Console.Write( "Info.Name                    " );       Console.Write( "Info.DisplayName" );       Console.WriteLine();        // Display the EncodingInfo names for every encoding, and compare with the equivalent Encoding names.       foreach( EncodingInfo ei in Encoding.GetEncodings() )  {          Encoding e = ei.GetEncoding();           Console.Write( "{0,-15}", ei.CodePage );          if ( ei.CodePage == e.CodePage )             Console.Write( "    " );          else             Console.Write( "*** " );           Console.Write( "{0,-25}", ei.Name );          if ( ei.CodePage == e.CodePage )             Console.Write( "    " );          else             Console.Write( "*** " );           Console.Write( "{0,-25}", ei.DisplayName );          if ( ei.CodePage == e.CodePage )             Console.Write( "    " );          else             Console.Write( "*** " );           Console.WriteLine();       }     }  }   /*  This code produces the following output.  Info.CodePage      Info.Name                    Info.DisplayName 37                 IBM037                       IBM EBCDIC (US-Canada)        437                IBM437                       OEM United States             500                IBM500                       IBM EBCDIC (International)     708                ASMO-708                     Arabic (ASMO 708)             720                DOS-720                      Arabic (DOS)                  737                ibm737                       Greek (DOS)                   775                ibm775                       Baltic (DOS)                  850                ibm850                       Western European (DOS)        852                ibm852                       Central European (DOS)        855                IBM855                       OEM Cyrillic                  857                ibm857                       Turkish (DOS)                 858                IBM00858                     OEM Multilingual Latin I      860                IBM860                       Portuguese (DOS)              861                ibm861                       Icelandic (DOS)               862                DOS-862                      Hebrew (DOS)                  863                IBM863                       French Canadian (DOS)         864                IBM864                       Arabic (864)                  865                IBM865                       Nordic (DOS)                  866                cp866                        Cyrillic (DOS)                869                ibm869                       Greek, Modern (DOS)           870                IBM870                       IBM EBCDIC (Multilingual Latin-2)     874                windows-874                  Thai (Windows)                875                cp875                        IBM EBCDIC (Greek Modern)     932                shift_jis                    Japanese (Shift-JIS)          936                gb2312                       Chinese Simplified (GB2312)     949                ks_c_5601-1987               Korean                        950                big5                         Chinese Traditional (Big5)     1026               IBM1026                      IBM EBCDIC (Turkish Latin-5)     1047               IBM01047                     IBM Latin-1                   1140               IBM01140                     IBM EBCDIC (US-Canada-Euro)     1141               IBM01141                     IBM EBCDIC (Germany-Euro)     1142               IBM01142                     IBM EBCDIC (Denmark-Norway-Euro)     1143               IBM01143                     IBM EBCDIC (Finland-Sweden-Euro)     1144               IBM01144                     IBM EBCDIC (Italy-Euro)       1145               IBM01145                     IBM EBCDIC (Spain-Euro)       1146               IBM01146                     IBM EBCDIC (UK-Euro)          1147               IBM01147                     IBM EBCDIC (France-Euro)      1148               IBM01148                     IBM EBCDIC (International-Euro)     1149               IBM01149                     IBM EBCDIC (Icelandic-Euro)     1200               utf-16                       Unicode                       1201               unicodeFFFE                  Unicode (Big-Endian)          1250               windows-1250                 Central European (Windows)     1251               windows-1251                 Cyrillic (Windows)            1252               Windows-1252                 Western European (Windows)     1253               windows-1253                 Greek (Windows)               1254               windows-1254                 Turkish (Windows)             1255               windows-1255                 Hebrew (Windows)              1256               windows-1256                 Arabic (Windows)              1257               windows-1257                 Baltic (Windows)              1258               windows-1258                 Vietnamese (Windows)          1361               Johab                        Korean (Johab)                10000              macintosh                    Western European (Mac)        10001              x-mac-japanese               Japanese (Mac)                10002              x-mac-chinesetrad            Chinese Traditional (Mac)     10003              x-mac-korean                 Korean (Mac)                  10004              x-mac-arabic                 Arabic (Mac)                  10005              x-mac-hebrew                 Hebrew (Mac)                  10006              x-mac-greek                  Greek (Mac)                   10007              x-mac-cyrillic               Cyrillic (Mac)                10008              x-mac-chinesesimp            Chinese Simplified (Mac)      10010              x-mac-romanian               Romanian (Mac)                10017              x-mac-ukrainian              Ukrainian (Mac)               10021              x-mac-thai                   Thai (Mac)                    10029              x-mac-ce                     Central European (Mac)        10079              x-mac-icelandic              Icelandic (Mac)               10081              x-mac-turkish                Turkish (Mac)                 10082              x-mac-croatian               Croatian (Mac)                12000              utf-32                       Unicode (UTF-32)              12001              utf-32BE                     Unicode (UTF-32 Big-Endian)     20000              x-Chinese-CNS                Chinese Traditional (CNS)     20001              x-cp20001                    TCA Taiwan                    20002              x-Chinese-Eten               Chinese Traditional (Eten)     20003              x-cp20003                    IBM5550 Taiwan                20004              x-cp20004                    TeleText Taiwan               20005              x-cp20005                    Wang Taiwan                   20105              x-IA5                        Western European (IA5)        20106              x-IA5-German                 German (IA5)                  20107              x-IA5-Swedish                Swedish (IA5)                 20108              x-IA5-Norwegian              Norwegian (IA5)               20127              us-ascii                     US-ASCII                      20261              x-cp20261                    T.61                          20269              x-cp20269                    ISO-6937                      20273              IBM273                       IBM EBCDIC (Germany)          20277              IBM277                       IBM EBCDIC (Denmark-Norway)     20278              IBM278                       IBM EBCDIC (Finland-Sweden)     20280              IBM280                       IBM EBCDIC (Italy)            20284              IBM284                       IBM EBCDIC (Spain)            20285              IBM285                       IBM EBCDIC (UK)               20290              IBM290                       IBM EBCDIC (Japanese katakana)     20297              IBM297                       IBM EBCDIC (France)           20420              IBM420                       IBM EBCDIC (Arabic)           20423              IBM423                       IBM EBCDIC (Greek)            20424              IBM424                       IBM EBCDIC (Hebrew)           20833              x-EBCDIC-KoreanExtended      IBM EBCDIC (Korean Extended)     20838              IBM-Thai                     IBM EBCDIC (Thai)             20866              koi8-r                       Cyrillic (KOI8-R)             20871              IBM871                       IBM EBCDIC (Icelandic)        20880              IBM880                       IBM EBCDIC (Cyrillic Russian)     20905              IBM905                       IBM EBCDIC (Turkish)          20924              IBM00924                     IBM Latin-1                   20932              EUC-JP                       Japanese (JIS 0208-1990 and 0212-1990)     20936              x-cp20936                    Chinese Simplified (GB2312-80)     20949              x-cp20949                    Korean Wansung                21025              cp1025                       IBM EBCDIC (Cyrillic Serbian-Bulgarian)     21866              koi8-u                       Cyrillic (KOI8-U)             28591              iso-8859-1                   Western European (ISO)        28592              iso-8859-2                   Central European (ISO)        28593              iso-8859-3                   Latin 3 (ISO)                 28594              iso-8859-4                   Baltic (ISO)                  28595              iso-8859-5                   Cyrillic (ISO)                28596              iso-8859-6                   Arabic (ISO)                  28597              iso-8859-7                   Greek (ISO)                   28598              iso-8859-8                   Hebrew (ISO-Visual)           28599              iso-8859-9                   Turkish (ISO)                 28603              iso-8859-13                  Estonian (ISO)                28605              iso-8859-15                  Latin 9 (ISO)                 29001              x-Europa                     Europa                        38598              iso-8859-8-i                 Hebrew (ISO-Logical)          50220              iso-2022-jp                  Japanese (JIS)                50221              csISO2022JP                  Japanese (JIS-Allow 1 byte Kana)     50222              iso-2022-jp                  Japanese (JIS-Allow 1 byte Kana - SO/SI)     50225              iso-2022-kr                  Korean (ISO)                  50227              x-cp50227                    Chinese Simplified (ISO-2022)     51932              euc-jp                       Japanese (EUC)                51936              EUC-CN                       Chinese Simplified (EUC)      51949              euc-kr                       Korean (EUC)                  52936              hz-gb-2312                   Chinese Simplified (HZ)       54936              GB18030                      Chinese Simplified (GB18030)     57002              x-iscii-de                   ISCII Devanagari              57003              x-iscii-be                   ISCII Bengali                 57004              x-iscii-ta                   ISCII Tamil                   57005              x-iscii-te                   ISCII Telugu                  57006              x-iscii-as                   ISCII Assamese                57007              x-iscii-or                   ISCII Oriya                   57008              x-iscii-ka                   ISCII Kannada                 57009              x-iscii-ma                   ISCII Malayalam               57010              x-iscii-gu                   ISCII Gujarati                57011              x-iscii-pa                   ISCII Punjabi                 65000              utf-7                        Unicode (UTF-7)               65001              utf-8                        Unicode (UTF-8)    */  

적용 대상

.NET Core

3.0 Preview 2 2.2 2.1 2.0

.NET Framework

4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0

.NET Standard

2.0

Xamarin.Android

7.1

Xamarin.iOS

10.8

Xamarin.Mac

3.0

 

=================================

=================================

=================================

 

 

 

출처: https://freeprog.tistory.com/220

 

 

C# -- String, char, byte 변환하기

 

환경 : windows 7 64bit, visual studio 2013 community

 

참고 : https://msdn.microsoft.com/ko-kr/library/system.text.encoding(v=vs.110).aspx  --> Encoding Class

        https://msdn.microsoft.com/ko-kr/library/744y86tc(v=vs.110).aspx  --> GetString() 메소드

        https://msdn.microsoft.com/ko-kr/library/system.text.encoding.ascii(v=vs.110).aspx   --> Encoding.ASCII

        http://www.csharpstudy.com/Tip/Tip-string-encoding.aspx  

        https://msdn.microsoft.com/ko-kr/library/kdcak6ye(v=vs.110).aspx   --> Encoding.Convert() 메소드

 

 

 

 

1. String -> byte[] 로 변환 하기

 

String a = "우리12abc헐";

 

byte[] c = System.Text.Encoding.Default.GetBytes(a); // String to default byte

byte[] d = System.Text.Encoding.Unicode.GetBytes(a); // String to unicode byte

byte[] e = System.Text.Encoding.UTF8.GetBytes(a);  // String to UTF8 byte

byte[] f = System.Text.Encoding.ASCII.GetBytes(a); // 하위 7bit 만 변환됨.

 

 

   ** 주의 : Encoding.ASCII  --> ASCII(7비트) 문자 집합에 대한 인코딩, 따라서 하위 7bit 만 변환됨. 한글은 데이터 손실 발생.

 
 

2. byte[] -> String 으로 변환하기

 

Console.WriteLine(System.Text.Encoding.Default.GetString(c));  // Default byte[] --> String 

Console.WriteLine(System.Text.Encoding.Unicode.GetString(d));  // Unicode byte[] --> String

Console.WriteLine(System.Text.Encoding.UTF8.GetString(e));  // UTF8 byte[] --> String

 

 

3. byte[] 인코딩 변환하기

 

// UTF8 byte[] --> Default byte[] 로 변환하기.

byte[] new_default = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.Defaulte);

 

 

반응형

 

728x90

 

 

 

4. String <--> char 상호 변환하기

 

1) String --> char 변환

 

String a = "우리12abc헐";

char[] b = a.ToCharArray();  // String to char  --  char 은 유니코드.

Console.WriteLine(b);  // char[] 출력하기.

 

2) char[] --> String 변환

 

String aa = new String(b);  // char[] to String

Console.WriteLine(aa);        // char[] to String 변환후 출력

 

 

 

<< 아래 예제 실행 결과 >>

 

 

 

 

<< 예제 소스 >>

 

 

  using System;
  using System.Text;
   
   
  namespace StringToByte
  {
  class Program
  {
  static void Main(string[] args)
  {
  String a = "우리12abc헐";
   
  char[] b = a.ToCharArray(); // String to char -- char 은 유니코드.
   
  // String to byte[]
  byte[] c = System.Text.Encoding.Default.GetBytes(a); // String to default byte
  byte[] d = System.Text.Encoding.Unicode.GetBytes(a); // String to unicode byte
  byte[] e = System.Text.Encoding.UTF8.GetBytes(a); // String to UTF8 byte
  byte[] f = System.Text.Encoding.ASCII.GetBytes(a); // 하위 7bit 만 변환됨.
   
  Console.WriteLine("원본 String == {0}", a);
   
  Console.WriteLine("\n -------- 길이 ----------------------- ");
   
  Console.WriteLine("String 길이 == {0}", a.Length); // 한글, 영어 모두 1 글자 길이 = 1
  Console.WriteLine("char[] 로 변환후 길이 == {0}", b.Length); // 한글, 영어 모두 1 글자 길이 = 1
   
  Console.WriteLine("byte[] - Default 로 변환후 길이 == {0}", c.Length); // 한글 1자 길이 = 2 bytes, 영어 1자 길이 = 1byte
  Console.WriteLine("byte[] - Unicode 로 변환후 길이 == {0}", d.Length); // 한글, 영어 모두 1 글자 길이 = 2
  Console.WriteLine("byte[] - UTF8 로 변환후 길이 == {0}", e.Length); // 한글, 영어 모두 1 글자 길이 = 가변?
   
  Console.WriteLine("byte[] - ASCII 로 변환후 길이 == {0}", f.Length); // 한글, 영어 모두 1 글자 길이 = 1
   
   
  Console.WriteLine("\n --------- 인코딩 이름 ---------------------------- ");
  Console.WriteLine("Encoding.Default.EncodingName == {0}", System.Text.Encoding.Default.EncodingName);
  Console.WriteLine("Encoding.Unicode.EncodingName == {0}", System.Text.Encoding.Unicode.EncodingName);
  Console.WriteLine("Encoding.UTF8.EncodingName == {0}", System.Text.Encoding.UTF8.EncodingName);
  Console.WriteLine("Encoding.ASCII.EncodingName == {0}", System.Text.Encoding.ASCII.EncodingName);
   
   
  Console.WriteLine("\n ------------------------------------- ");
  Console.WriteLine(b); // char[] 출력하기.
   
  String aa = new String(b); // char[] to String
  Console.WriteLine("char[] 에서 String 으로 변환 == {0}", aa); // char[] to String 변환후 출력
   
  Console.WriteLine(c); // 제대로 출력 안됨. 왜냐면, WriteLine 은 "String" 을 출력한다.
   
   
  Console.WriteLine("\n ---------------- byte[] to String 으로 변환후 출력하기 --------------------- ");
  // byte[] to String
  Console.WriteLine("Default byte[] 에서 String 으로 변환 == {0}", System.Text.Encoding.Default.GetString(c));
  Console.WriteLine("Unicode byte[] 에서 String 으로 변환 == {0}", System.Text.Encoding.Unicode.GetString(d));
  Console.WriteLine("UTF8 byte[] 에서 String 으로 변환 == {0}", System.Text.Encoding.UTF8.GetString(e));
   
  // 제대로 출력안됨.
  Console.WriteLine("ASCII byte[] 에서 String 으로 변환 == {0}", System.Text.Encoding.ASCII.GetString(f));
   
  Console.WriteLine("\n ----------------- 인코딩 변환후 출력하기 -------------------- ");
  // UTF8 byte[] to Default byte[] 로 변환하기.
  byte[] new_default = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.Default, e);
   
  Console.WriteLine(System.Text.Encoding.Default.GetString(new_default));
   
  Console.ReadLine();
  }
  }
  }



출처: https://freeprog.tistory.com/220 [취미로 하는 프로그래밍 !!!]

 

 

=================================

=================================

=================================

 

 

 

출처: https://linsoo.co.kr/archives/19566

 

C#에서 byte[]를 string으로 변환 할때 주의 할점

 

C#에서 byte배열을 string으로 변환할때 주로

1
string tmpSTR = Encoding.Default.GetString(바이트배열);

이렇게 쓰라고 많이 나오는데 주의해야 할점이 byte[] 뒷부분에 0으로 채워져 있을경우 그냥 잘라버리는게 아니라
\0 값으로 채워진 string이 생깁니다.

1
2
3
4
5
6
7
byte[] tmp = new byte[5];
tmp[0]= 'a';
tmp[1]= 'b';
tmp[2]= 'c';
tmp[3]= 0;
tmp[4]= 0;
string tmpSTR = Encoding.Default.GetString(tmp);

이런 상황에서 사용하면 길이 3짜리 tmpSTR이 나오는게 아니라 길이5짜리 abc\0\0이 생성되더군요.

GetString(array, index, count) 이렇게 인자 넣어서 정확히 문자열 끝나는 부분까지만 잘라내면 별 문제 없지만
별 생각 없이 쓰다 보니 Console.Write 함수를 쓸때  \0 값이 영향을 줘서 이 배열 이후에 Console.Write() 가 출력되지 않는 문제를 발생합니다. (첨엔 Console.Write 함수에 뭔가 문제 있는줄 알았음)

쉽게 할려면 뒤에 .TrimEnd(‘\0’)을 붙여주면 됩니다.

1
string tmpSTR = Encoding.Default.GetString(바이트배열).TrimEnd('\0');

귀찮게(?) 할려면 byte[] 돌면서 0부분 위치 찾아서 인자로 넣어주면 되고요.

이런식으로 해도된다.

 

string tmpSTR = Encoding.Default.GetString(바이트배열).Trim('\0');

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역