Bitcoin Core 0.19 through 0.21 (at least) uppercases the bech32 address in BIP21 strings so that they will produce less complex QR codes that can sometimes take up less space or be quicker to scan accurately.
However, RFC3986 allows treating URI schemas as case insensitive, so it should be possible to also uppercase the leading BITCOIN
(and the separator :
is part of the QR code uppercase set). RFC3986 says:
An implementation should accept uppercase letters as equivalent to lowercase in scheme names (e.g., allow “HTTP” as well as “http”) for the sake of robustness but should only produce lowercase scheme names for consistency.
BIP21 agrees:
The scheme component (“bitcoin:”) is case-insensitive, and implementations must accept any combination of uppercase and lowercase letters.
One important downside of this approach is that not all wallets currently implement RFC3986 according to specification. See https://github.com/btcpayserver/btcpayserver/issues/2099 for at least one instance of this. It’s my hope that the recent attention the BTCPay team was able to bring to this issue will help get any other wallets with this issue to upgrade in the near future, allowing Bitcoin Core and others to use more efficient uppercase schema strings with bech32 addresses.