Hello,

I have recently noticed that a lot of connections with certain special characters don't work with SqlAlchemy as it requires the passwords to be [urlencoded when they contain special characters](https://stackoverflow.com/questions/1423804/writing-a-connection-string-when-password-contains-special-characters). 

Would there be any impact to changing the code at line 81 to urlencode the password like `urllib.parse.quote_plus(conn.password)` to prevent login failures for special characters? 

https://github.com/apache/airflow/blob/dee304b222d355b03794aa063f39e3ee13997730/airflow/hooks/dbapi_hook.py#L72-L88

I initially caught this issue while using the OdbcHook method found here. https://github.com/apache/airflow/blob/dee304b222d355b03794aa063f39e3ee13997730/airflow/providers/odbc/hooks/odbc.py#L198-L204

Happy to create a feature request, I just want to confirm that this issue makes sense. 


airflow/hooks/dbapi_hook.py
#
#
#
from contextlib import closing
from datetime import datetime
from typing import Any, Optional
from sqlalchemy import create_engine
from airflow.exceptions import AirflowException
from airflow.hooks.base_hook import BaseHook
from airflow.typing_compat import Protocol
class ConnectorProtocol(Protocol):
    """A protocol where you can connect to a database."""
    def connect(self, host: str, port: int, username: str, schema: str) -> Any:
        """
        Connect to a database.
        :param host: The database host to connect to.
        :param port: The database port to connect to.
        :param username: The database username used for the authentication.
        :param schema: The database schema to connect to.
        :return: the authorized connection object.
        """
class DbApiHook(BaseHook):