# coding=utf-8
from __future__ import unicode_literals
from ..internet import Provider as InternetProvider

import re


class Provider(InternetProvider):

    free_email_domains = (
        'web.de', 'gmail.com', 'hotmail.de', 'yahoo.de', 'googlemail.com',
        'aol.de', 'gmx.de'
    )
    tlds = ('com', 'com', 'com', 'net', 'org', 'de', 'de', 'de')

    @staticmethod
    def _to_ascii(string):
        replacements = (
            ('ä', 'ae'), ('Ä', 'Ae'),
            ('ö', 'oe'), ('O', 'Oe'),
            ('ü', 'ue'), ('Ü', 'Ue'),
            ('ß', 'ss')
        )
        for search, replace in replacements:
            string = string.replace(search, replace)

        return string

    def user_name(self):
        pattern = self.random_element(self.user_name_formats)
        return self._to_ascii(
            self.bothify(self.generator.parse(pattern)
        ).lower())

    def domain_word(self):
        company = self.generator.format('company')
        company_elements = company.split(' ')
        company = self._to_ascii(company_elements.pop(0))
        return re.sub(r'\W', '', company).lower()

faker/providers/de_DE/internet.py
# coding=utf-8
from __future__ import unicode_literals
from ..internet import Provider as InternetProvider

import re


class Provider(InternetProvider):

    free_email_domains = (
        'web.de', 'gmail.com', 'hotmail.de', 'yahoo.de', 'googlemail.com',
        'aol.de', 'gmx.de'
    )
    tlds = ('com', 'com', 'com', 'net', 'org', 'de', 'de', 'de')

    @staticmethod
    def _to_ascii(string):
        replacements = (
            ('ä', 'ae'), ('Ä', 'Ae'),
            ('ö', 'oe'), ('Ö', 'Oe'),
            ('ü', 'ue'), ('Ü', 'Ue'),
            ('ß', 'ss')
        )
        for search, replace in replacements:
            string = string.replace(search, replace)

        return string

    def user_name(self):
        pattern = self.random_element(self.user_name_formats)
        return self._to_ascii(
            self.bothify(self.generator.parse(pattern)
        ).lower())

    def domain_word(self):
        company = self.generator.format('company')
        company_elements = company.split(' ')
        company = self._to_ascii(company_elements.pop(0))
        return re.sub(r'\W', '', company).lower()

faker/providers/de_DE/internet.py
diff --git a/faker/providers/de_DE/internet.py b/faker/providers/de_DE/internet.py
index 729b972118..c6d1c5426b 100644
--- a/faker/providers/de_DE/internet.py
+++ b/faker/providers/de_DE/internet.py
@@ -17,7 +17,7 @@ class Provider(InternetProvider):
     def _to_ascii(string):
         replacements = (
             ('ä', 'ae'), ('Ä', 'Ae'),
-            ('ö', 'oe'), ('O', 'Oe'),
+            ('ö', 'oe'), ('Ö', 'Oe'),
             ('ü', 'ue'), ('Ü', 'Ue'),
             ('ß', 'ss')
         )

Capital O missing an umlaut
Hello, I noticed in faker/Providers/De_de/internet.py in the _to_ascii method, the capital O is missing an umlaut. 

It should be: ('Ö', 'Oe') 

Currently:
replacements = (
            ('ä', 'ae'), ('Ä', 'Ae'),
            ('ö', 'oe'), ('O', 'Oe'),
            ('ü', 'ue'), ('Ü', 'Ue'),
            ('ß', 'ss')

