---
title: "Convertera =?iso-8859-1?Q?H=E4jsan?=+"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/71464-convertera-iso-8859-1-q-h-e4jsan"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Nickemannen"
published: "2003-03-18T11:22:33.000Z"
updated: "2003-07-08T20:03:27.000Z"
replies: 10
views: 678
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/71464-convertera-iso-8859-1-q-h-e4jsan"
---

# Convertera =?iso-8859-1?Q?H=E4jsan?=+

## #1 — Nickemannen, 2003-03-18T11:22Z

Hur gör jag om detta till häjsan ?

Permalänk: https://www.webforum.nu/p/71464

## #2 — niko, 2003-03-18T11:44Z

Kodningen kallas [quoted-printable](http://www.freesoft.org/CIE/RFC/1521/6.htm). Om det finns nåt inbyggt stöd i .NET vet jag inte. Det borde iaf gå att hitta färdig kod om du söker lite.

Annars kan du köra "the hard way": De två första tecknen till höger om "=" är det hexadecimala asci-värdet för tecknet: E4(hexa)-\>228(decimalt)-\>ä.

Permalänk: https://www.webforum.nu/p/983041

## #3 — Nickemannen, 2003-03-18T16:02Z

Jo, men jag hämtar ett långt mail och det verkar som om

" tecknen gör om sig också :(.

Jag hittar ingenting på msdn där finns det bara för c/c++.

Och på google hittar jag inget användbart heller

Permalänk: https://www.webforum.nu/p/983216

## #4 — niko, 2003-03-18T17:07Z

Nej. Det verkar vara rätt klurigt. Jag hittar heller inget vettigt heller för .NET (som är gratis).

Kanske leder dig på fel spår .. Men det känns ändå lite som om du får koda om själv.

Jag kollade som hastigast på C++-koden i det [här](http://www.codeproject.com/internet/mimesniffer.asp) projektet (metoden Decode i QuotedPrinted.cpp). I princip handlar det om att leta efter "="-tecken och koda om nästa två tecken som jag skrev ovan.

Men, som sagt, jag vet inte. Kanske finns nåt enklare ..? Andra borde ju haft samma problem, tycker man.

Permalänk: https://www.webforum.nu/p/983267

## #5 — Nickemannen, 2003-03-18T17:38Z

Jo, sant men nu vet jag iallfall vad jag är ute efter jag har försökt med en massa
Text.Enoding.GetEncoding("iso-8859-1")
på var enda byte nu vet jag vad jag skall leta efter. Så tack.

Hoppas verkligen det finns någion som gjort detta.

Jag tycker det är kasst att de inte lagt till detta i .NET iallfall.

Permalänk: https://www.webforum.nu/p/983287

## #6 — Nickemannen, 2003-03-18T17:56Z

<http://www.codeproject.com/csharp/smtpemailer.asp?target=quoted%2Dprintable>

i denna länken har någon påstått sig löst problemet men jag kan inte hitta var i hans kod där han har löst det

Permalänk: https://www.webforum.nu/p/983299

## #7 — Nickemannen, 2003-03-18T18:01Z

```
private string EncodeBodyAsQuotedPrintable()
		{
			StringBuilder buf = new StringBuilder();
			sbyte cur;
			for(int x = 0; x < body.Length; ++x)
			{
				cur = (sbyte) body[x];
				//is this a valid ascii character?
				if( ((cur >= 33) && (cur <= 60)) || ((cur >= 62) && (cur <= 126)) || (cur == '\r') || (cur == '\n') || (cur == '\t') || (cur == ' '))
				{
					buf.Append(body[x]);
				}
				else
				{
					buf.Append('=');
					buf.Append(((sbyte)((cur & 0xF0) >> 4)).ToString("X"));
					buf.Append(((sbyte) (cur & 0x0F)).ToString("X"));
				}
			}
			//format data so that lines don't end with spaces (if so, add a trailing '='), etc.
			//for more detail see RFC 2045.

			int start = 0;
			string enc = buf.ToString();
			buf.Length = 0;
			for(int x = 0; x < enc.Length; ++x)
			{
				cur = (sbyte) enc[x];
				if(cur == '\n' || cur == '\r' || x == (enc.Length - 1))
				{
					buf.Append(enc.Substring(start, x - start + 1));
					start = x + 1;
					continue;
				}
				if((x - start) > 76)
				{
					bool inWord = true;
					while(inWord)
					{
						inWord = (!char.IsWhiteSpace(enc, x) && enc[x-2] != '=');
						if(inWord)
						{
							--x;
							cur = (sbyte) enc[x];
						}
						if(x == start)
						{
							x = start + 76;
							break;
						}
					}
					buf.Append(enc.Substring(start, x - start + 1));
					buf.Append("=\r\n");
					start = x + 1;
				}
			}
			return buf.ToString();
		}
```

Denna hittade jag på sidan.

Permalänk: https://www.webforum.nu/p/983300

## #8 — niko, 2003-03-18T18:26Z

> Jag antar att åäö inte finns med i denna funktion heller.

Jo. I stora drag gör han så här:

1\. Han kollar om tecknen tillhör det engelska alfabetet eller är carriage-return eller newline eller tab eller blank. I så fall lämnar han dem oförändrade.
2\. Om det *inte* är något av dessa tecken så ersätter han med "="-tecknet + tecknets asciivärde hexadecimalt (två bytes).
3\. Han loopar igenom alla rader och lägger på ett "="-tecken på alla rader som slutar med ett eller flera blanktecken.

Du skall alltså vända på detta och leta efter "="-tecken och hantera dem olika beroende på om de står vid en radbrytning, eller inte. Ett annat alternativ kunde ju vara att maila honom och fråga om han rent av har en **De**codeBodyAsQuotedPrintable färdig?

Permalänk: https://www.webforum.nu/p/983316

## #9 — renholm, 2003-06-27T23:08Z

För att dra upp en gammal tråd så har jag, tror jag, kommit fram till ett bra sätt att decoda QuotedPrintable.

```
string DecodeQP(MemoryStream stream, long pos, Encoding encoding)
{
MemoryStream decoded = new MemoryStream();

stream.Position = pos;
int b = stream.ReadByte();
while(b > -1)
{
	if ((char)b == '=' )
	{
		string hex = ((char)stream.ReadByte()).ToString() + ((char)stream.ReadByte()).ToString();
		decoded.WriteByte((byte)Convert.ToInt32(hex, 16));
	}
	else
	{
		decoded.WriteByte((byte)b);
	}
	b = stream.ReadByte();
}

decoded.Position = 0;
TextReader r = new StreamReader(decoded, encoding);
return r.ReadToEnd();
}
```

Har fungerat bra för mig, kom gärna med förslag på förbättringar eller error rapporter.

Permalänk: https://www.webforum.nu/p/1097178

## #10 — Nickemannen, 2003-06-28T10:35Z

Såhär blev min slutgiltliga. Den som jag hittade på sidan var lite smådålig hehe

```
static string DecryptQuotedprintable(string strInput)
{
	strPattern = "=..";
	matches = Regex.Matches(strInput,strPattern);
	foreach(Match item in matches)
	{
		strInput = strInput.Replace(item.Value,AsciHextoChar(item.Value.Substring(1,item.Value.Length-1)));
}
	strInput = strInput.Replace("= ","\n");
	return strInput;
}
static string AsciHextoChar(string strHex)
{
	int n = 0;
	int intTemp = 0;
	string sHexTab = "0123456789ABCDEF";
	n = sHexTab.IndexOf(strHex.Substring(0,1));
	intTemp = (n)*16;
	n = sHexTab.IndexOf(strHex.Substring(1,1));
		intTemp = intTemp + (n);
	return Convert.ToChar(intTemp).ToString();
}
```

Permalänk: https://www.webforum.nu/p/1097312

## #11 — PatrikB, 2003-07-08T20:03Z

Och så kontrar jag med lite VB-kod på hur min Decoder vart:

```
            Public Function DecodeBody(ByVal sData As String) As String
                Dim _pattern As String = "=.."
                Dim _regEx As New Regex(_pattern)
                Dim _match As Match

                For Each _match IN _regEx.Matches(sData)
                    Dim _tmp As String = _match.Value
                    sData = sData.Replace(_tmp, ASCIIHexToChar(_tmp.Substring(1,_tmp.Length - 1)))
                Next _match
                sData = sData.Replace("=" + ControlChars.Cr, "").Replace(ControlChars.CrLf, "")

                'sData = BreakLine(sData)

                Return sData
            End Function

            Public Function ASCIIHexToChar(ByVal sHexData As String) As String

                'If (sHexData = String.Empty OR sHexData.Length > 2) Then
                '    Throw New Exception("Argument longer than 2 characters - Argument = " + sHexData)
                'End If

                Dim n As Integer = 0
                Dim nTmp As Integer = 0
                Dim _hex As String = "0123456789ABCDEF"

                n = _hex.IndexOf(sHexData.Substring(0,1))

                    nTmp = n * 16
                n = _hex.IndexOf(sHexData.Substring(1,1))
                    nTmp = nTmp + n
                Try
                    Return Convert.ToChar(nTmp).ToString
                Catch
                    Return sHexData
                End Try
            End Function
```

Thx Nickemannen

cya,
/PatrikB

Permalänk: https://www.webforum.nu/p/1106337

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/71464-convertera-iso-8859-1-q-h-e4jsan
