2009-09-30 5 views
3

VB.NET을 사용하여 UTF8 문자열을 ISO-8859-1 문자열로 변환해야합니다.UTF8 문자열을 ISO-8859-1로 인코딩 String (VB.NET)

예를 들면?


내가 라틴 기능이 아닌 실행을 시도 텍스트을 강조했다. 잘못된 문자열이 나타납니다.

제 경우는 API를 사용하여 SMS를 보내야한다는 것입니다.

 baseurl = "http://www.myweb.com/api/sendsms.php" 
     client = New WebClient 
     client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") 
     client.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1") 
     client.QueryString.Add("user", user) 
     client.QueryString.Add("password", pass) 
     client.QueryString.Add("alias", myAlias) 
     client.QueryString.Add("dest", mobile) 
     textoSms = Me.mmTexto.Text 
     textoSms = System.Web.HttpUtility.UrlEncode(textoSms) 
     client.QueryString.Add("message", textoSms) 
     data = client.OpenRead(baseurl) 
     reader = New StreamReader(data) 
     s = reader.ReadToEnd() 
     data.Close() 
     reader.Close() 

하지만 실행은 ... 내가 잘못된 메시지가 나타납니다

지금 나는이 코드가 있습니다. 예를

를 들어 내가 작성하는 경우 : 마나 반환 MAA는 아나가

내가 aigüa에게 반환 AIGA

+0

전혀 희망이 없습니다. 나는 100 %에서 잘 작동하는 해결책을 얻지 못했습니다. 그렇지 않다면 나는 그것을 해결 된 것으로 표시했을 것입니다 ... 죄송합니다 ... – aco

+0

아니요, 물었습니다. 당신은 무엇을 시도 했습니까? 이 "질문"은 선행 연구의 증거가 없으므로 무엇을 해야할지를 묻는 것입니다. –

+0

나는 당신이 말한 것을 이해하지 못한다 .... 단지 그 질문이 3 년 전에 열렸다는 것을 안다! – aco

답변

8

를 작성하는 경우에 대해 어떻게 :

Dim converted as Byte() = Encoding.Convert(utf8, Encoding.UTF8, _ 
              Encoding.GetEncoding(28591)) 

하는 가정 그 때 당신은 "UTF-8 문자열"이라고 말합니다. "UTF-8 인 2 진 데이터 일부 텍스트의 ". 다른 것을 의미한다면 다음을 지정하십시오.

ISO-8859-1은 전체 유니 코드의 아주 작은 부분만을 나타냅니다. IIRC, 당신은 결국 "?" ISO-8859-1에서 사용할 수없는 소스 데이터의 문자.

+0

"감사합니다." 참고, 그것은 단지 나를 구해 줬다. – Hallaghan

+0

@jonskeet, 나는 "작은"단어의 사용에 문제가 있습니다. 기술적으로는 정확할 수도 있지만 유니 코드의 상당 부분이 대부분의 응용 프로그램과 관련이 없다는 것도 사실입니다. 이 페이지에는 ISO-8859-1의 "Complete Coverage"가있는 약 30 개의 현대 언어 목록이 있습니다. Spoiler : 그 중 하나는 스페인어입니다. https://en.wikipedia.org/wiki/ISO/IEC_8859-1 – JoelFan

+1

@JoelFan : 스페인어로 글을 쓰는 사람도 이모티콘이나 * t * 스페인어, 또는 다른 언어의 단어 등. 저는 현대 세계에서 ISO-8859-1로 제한된 응용 프로그램이 상당히 문제가 있다고 생각합니다. 개발자가 선택을 할 때마다 UTF-8을 사용하는 것이 좋습니다. –

3

인코딩 ISO-8859-1은 일반적으로 라틴어 -1이라고합니다. 당신은 존이 지적

, 그것은 사람들이 더 쉬울 수도 있습니다 전체 변환은 다음

Public Function ConvertUtf8ToLatin1(Dim bytes As Byte()) As Bytes() 
    Dim latin1 = Text.Encoding.GetEncoding(&H6FAF) 
    Return Encoding.Convert(Encoding.UTF8, latin1, bytes) 
End Function 

편집하여 수행 할 수 있습니다

Dim latin1 = Text.Encoding.GetEncoding(&H6FAF) 

다음을 수행하여이 인코딩을 얻을 수 있습니다 16 진수 & H6FAF가 아닌 10 진수 28591을 기억해야합니다.

+0

& H6FAF를 사용하는 이유 10 진수 리터럴 28591이 기억하기가 더 쉽습니다 (8859-1 이후를 아는 경우). –

+1

@ 존, 반사경을 사용하고 16 진수를 출력하고 있습니다. – JaredPar

1

System.Text.Encoding.GetEncoding("ISO-8859-1") 때문에 ñ 내 생각 엔 그 경우에 당신은 당신이 SMS에 대한 또 다른 인코딩 유형을 사용할 필요가있다.

이 여기에 게시해야하지만 난 문자열 대상 인코딩 형식을 지원하는지 확인하기 위해 C#으로 작은 기능을 만든 경우 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+1

에 포함되어 있습니다. – elgrego

0

는 그나마 알고 읽어 보시기 바랍니다.

는 ... 그것은 어떤 도움이 될 수

/// <summary> 
/// Function for checking if a string can support the target encoding type 
/// </summary> 
/// <param name="text">The text to check</param> 
/// <param name="targetEncoding">The target encoding</param> 
/// <returns>True if the encoding supports the string and false if it does not</returns> 
public bool SupportsEncoding(string text, Encoding targetEncoding) 
{ 
    var btext = Encoding.Unicode.GetBytes(text); 
    var bencodedtext = Encoding.Convert(Encoding.Unicode, targetEncoding, btext); 

    var checktext = targetEncoding.GetString(bencodedtext); 
    return checktext == text; 
} 

//Call the function demo with ISO-8859-1/Latin-1 
if (SupportsEncoding("some text...", Encoding.GetEncoding("ISO-8859-1"))) 
{ 
    //The encoding is supported 
} 
else 
{ 
    //The encoding is not supported 
}