Si cada ä/å/ö se representa en la salida mediante dos bytes, también es posible que esté codificando dos veces los caracteres. (Dado que la pregunta ya te muestra haciendo $dbh->{'mysql_enable_utf8'} = 1;
, sospecho que este es el caso más probable). Otra posibilidad, dado que está mostrando esto en una página web, es que la página no esté especificando que el juego de caracteres es UTF-8 en su <head>
y el navegador podría estar adivinando incorrectamente la codificación de caracteres que utiliza.
Mire de cerca el marco de su aplicación web, el sistema de plantillas, etc. para asegurarse de que los valores solo se codifiquen una vez entre el momento en que se recuperan de la base de datos y el momento en que llegan al navegador del usuario. Muchos marcos/motores de plantillas (como la combinación de Dancer y TT que normalmente uso) manejarán la codificación de salida automáticamente si los configura correctamente, lo que significa que los datos se codificarán dos veces si se codifican explícitamente antes de que se envíen.