Les caractères que vous avez affichés sont ceux que vous obtenez si vous prenez le texte en bas de cet article, que vous l'encodez en UTF-8, puis que vous le décodez (par erreur) en UTF-16BE.
En définitive, Safari décode les données de manière incorrecte (elles devraient être décodées en UTF-8, mais elles sont décodées en UTF-16BE). Il peut le faire pour plusieurs raisons :
- Le serveur a dit à tort Safari à décoder en tant qu'UTF-16BE (par exemple, via un fichier
charset
dans les Content-Type
en-tête de la réponse HTTP du serveur).
- Le serveur a incorrectement ajouté un UTF-16BE au début du message. NOMENCLATURE avant les données UTF-8.
-
Safari est configuré par défaut en UTF-16BE.
Je ne suis pas sûr de la manière dont cela pourrait être réalisé. La seule entrée UTF dans la liste d'encodage du manuel † est "Unicode (UTF-8)", ce qui semble exclure de forcer UTF-16BE (contrairement à TextEdit où vous pouvez effectivement sélectionner UTF-16BE, si vous personnalisez sa liste d'encodages).
-
Safari auto-détecté l'encodage de manière incorrecte.
Votre problème particulier semble être dû à un serveur (ou proxy) ‡ ) puisque vous dites qu'il ne se produit que par intermittence.
L'onglet Réseau de Safari peut vous montrer les en-têtes de réponse du serveur (pour confirmer ou infirmer une erreur). charset
), mais il serait probablement ennuyeux de devoir toujours se rappeler de l'ouvrir/activer pour chaque onglet que vous ouvrez (pour capturer l'information, il doit déjà être actif avant le chargement de la page d'intérêt - ce qui peut être difficile à prévoir si votre problème est intermittent).
Une capture de paquets pourrait permettre d'identifier une nomenclature erronée (et/ou une charset
), mais ces outils sont beaucoup moins pratiques (et généralement inutiles pour les requêtes cryptées (HTTPS)). Si vous savez que le problème se produit assez souvent, vous pouvez envoyer de nombreuses requêtes par l'intermédiaire de bouclette et essayer d'identifier les nomenclatures erronées/ charset
en examinant les données qu'il peut rapporter (en-têtes de réponse du serveur et octets de contenu brut).
† Vous pouvez choisir manuellement un encodage (dans Safari 5.1) via le sous-menu Encodage du texte du menu Affichage.
‡ Un tel mandataire pourrait être un "mandataire "transparent que vous ne soupçonneriez peut-être pas autrement.
<!-- LOCALIZERS: Each localizable piece of the page is marked with a comment -->
<HTML>
<!-- LOCALIZERS: If in a right-to-left locale, add dir="rtl" to the HTML element. -->
<HEAD>
<LINK rel=stylesheet type="text/css" href="page-load-errors.css">
<!-- LOCALIZERS: You might want to change the font family. You can also add styles to override sizes, etc. -->
<STYLE>
BODY {font-family:'Helvetica Neue';}
</STYLE>
<!-- LOCALIZERS: The next line contains the page title that appears in the window's title bar -->
<TITLE> </TITLE>
</HEAD>
<BODY>
<div class="error-container">
<div class="icon" alt="Safari Icon"></div>
<div class="text-container">
<!-- main title here, repeated 3 times -->
<P class="error-title error-text-engraving">%@ <A id="help-button"></a></P>
<P class="error-title error-text">%@ <A id="help-button"></a></P>
<P class="error-title error-text-inner-shadow">%@ <A id="help-button" class="%@" HREF='open-help-anchor:%@'></a></P>
</div>
<div class="text-container">
<!-- error message here, repeated 3 times -->
<P class="error-message error-text-engraving">%@</P>
<P class="error-message error-text">%@</P>
<P class="error-message error-text-inner-shadow">%@</P>
</div>
</div>
</BODY>
</HTML>
La traduction Google suggère que le cyrillique <title>
Le texte semble être ukrainien pour "Impossible d'ouvrir la page".
Les commentaires indiquent que ce texte n'a commencé à apparaître qu'après une mise à jour logicielle d'Apple. La mise à jour exacte était probablement la 10.7.3 mise à jour qui a ajouté la localisation pour plusieurs langues, dont l'ukrainien.
Je ne dispose pas d'un système 10.7, mais le contenu ci-dessus (à l'exception de l'Ukrainien <title>
) est largement identique au contenu des fichiers de 10.6 ( Safari 5.1.3) avec des noms comme /Applications/Safari.app/Contents/Resources/*.lproj/StandardErrorPage.html
; tous ces fichiers (sur 10.6 Safari 5.1.3) sont codés en UTF-16LE avec une BOM de tête (UTF-16LE). Cela indique fortement la deuxième raison possible que j'ai décrite : le "serveur" (en fait juste un fichier local) fournit du contenu avec un BOM incorrect.
Si vous pouvez identifier le fichier utilisé pour votre localisation particulière, vous pouvez probablement le "réparer". A titre indicatif, le fichier ukrainien est probablement quelque chose comme …/ua.lproj/StandardErrorPage.html
.
Remarque : La modification de ce fichier peut interrompre Safari La "signature de code" de l'entreprise. Sur 10.6, la version anglaise de ce fichier est répertoriée dans la section …/Safari.app/Contents/_CodeSignature/CodeResources
comme "optionnel", donc cela pourrait être correct (je ne l'ai pas essayé). Si vous essayez de modifier/remplacer le fichier, faites d'abord une sauvegarde ! Pour être sûr, vous pouvez faire une copie de l'ensemble du fichier Safari.app
dossier.
Vous pouvez utiliser un éditeur hexagonal (par ex. HexFiend ) pour ajuster les octets de tête de la nomenclature. Si vous avez effectivement affaire à un fichier qui commence par (hex) FE FF
(UTF-16BE BOM) et est suivi de données codées UTF-8 (c'est-à-dire que les octets suivants sont pour <!-- LOCALIZERS:
sans NUL (hex 00
) entre les caractères), alors vous pouvez probablement juste supprimer les deux premiers octets ( Safari devrait alors être capable de détecter automatiquement le contenu comme UTF-8). Vous pouvez également remplacer la séquence de tête de deux octets par FE FF
avec la séquence de trois octets EF BB BF
(c'est-à-dire l'encodage UTF-8 de U+FEFF).
Vous pouvez vous entraîner sur une copie du fichier si vous voulez tester le résultat avant de remplacer le fichier qui a été modifié. Safari utilise réellement. Il suffit de copier le fichier sur votre bureau (ou ailleurs), d'éditer de manière hexagonale cette copie, puis de l'ouvrir avec Safari . Après avoir effectué les modifications correctes (et rechargé la page), vous devriez voir le titre ukrainien dans la barre de titre et plusieurs lignes de %@
dans la page elle-même (au lieu de l'ancienne page des caractères chinois/coréens/etc.).
Avec un peu de chance, Apple corrigera tout cela dans un nouveau Safari /Mise à jour du lion.