@@ -251,17 +251,15 @@ def get(
251
251
# ASGI header keys are in lower case
252
252
key = key .lower ()
253
253
decoded = [
254
- _value . decode ( "utf8" )
254
+ _decode_header_item ( _value )
255
255
for (_key , _value ) in headers
256
- if _key . decode ( "utf8" ).lower () == key
256
+ if _decode_header_item ( _key ).lower () == key
257
257
]
258
- if not decoded :
259
- return None
260
- return decoded
258
+ return decoded or None
261
259
262
260
def keys (self , carrier : dict ) -> typing .List [str ]:
263
261
headers = carrier .get ("headers" ) or []
264
- return [_key . decode ( "utf8" ) for (_key , _value ) in headers ]
262
+ return [_decode_header_item ( _key ) for (_key , _value ) in headers ]
265
263
266
264
267
265
asgi_getter = ASGIGetter ()
@@ -344,10 +342,7 @@ def collect_custom_request_headers_attributes(scope):
344
342
)
345
343
346
344
# Decode headers before processing.
347
- headers = {
348
- _key .decode ("utf8" ): _value .decode ("utf8" )
349
- for (_key , _value ) in scope .get ("headers" )
350
- }
345
+ headers = _decode_headers (scope .get ("headers" ))
351
346
352
347
return sanitize .sanitize_header_values (
353
348
headers ,
@@ -370,10 +365,7 @@ def collect_custom_response_headers_attributes(message):
370
365
)
371
366
372
367
# Decode headers before processing.
373
- headers = {
374
- _key .decode ("utf8" ): _value .decode ("utf8" )
375
- for (_key , _value ) in message .get ("headers" )
376
- }
368
+ headers = _decode_headers (message .get ("headers" ))
377
369
378
370
return sanitize .sanitize_header_values (
379
371
headers ,
@@ -657,3 +649,17 @@ async def otel_send(message):
657
649
await send (message )
658
650
659
651
return otel_send
652
+
653
+
654
+ def _decode_headers (headers ):
655
+ return {
656
+ _decode_header_item (key ): _decode_header_item (value )
657
+ for key , value in headers
658
+ }
659
+
660
+
661
+ def _decode_header_item (value ):
662
+ try :
663
+ return value .decode ("utf-8" )
664
+ except ValueError :
665
+ return value .decode ("latin-1" )
0 commit comments