Since I was retagging questions (didn't really need to change the body, just resend it), I ended up using the `body_markdown`, encoded with `HTMLParser.HTMLParser().unescape()`

The `\r\n` issue was solved when I changed to a `POST` request.

<!-- language-all: lang-python -->

    body_markdown = str(HTMLParser.HTMLParser().unescape(question_data['items'][0]['body_markdown']))

<%%>

And then sending it with:

    response = requests.post('https://api.stackexchange.com/2.2/questions/'+str(q_id)+'/edit',
          data={'body': body_markdown,
                'comment': 'removed '+tag+' tag',
                'tags': ' '.join(tags),
                'title': title,
                'access_token': token,
                'site': site,
                'key': key
                }
            )