2010-12-01 12 views
2

J'essaye d'écrire du texte russe, ou du texte cyrillique, dans un fichier .txt. Je peux le faire avec succès, mais quand j'ouvre le fichier tout ce qui est écrit à la place du texte est un tas de points d'interrogation. Je pensais que c'était un problème d'encodage mais je n'ai rien trouvé dans ce domaine pour aider. J'ai écrit un petit script qui démontre le problème.Écrire du texte en russe au fichier txt

do shell script "> $HOME/Desktop/Russian\\ Text.txt" 
set text_path to ((path to home folder) & "Desktop:Russian Text.txt" as string) as alias 

set write_text to "Привет" 

tell application "Finder" 
    write write_text to text_path 
    set read_text to text of (read text_path) 
end tell 

Si quelqu'un a des idées sur les raisons pour lesquelles cela se produit, veuillez me le faire savoir. Je vous remercie.

+0

Avec quoi ouvrez-vous le fichier? Cela ressemble à un problème avec ce qui affiche le fichier pour moi. Il ne détecte pas le jeu de caractères et remplace les caractères qu'il ne peut pas afficher par des points d'interrogation. – Brad

Répondre

5

Je ne peux pas répondre à votre question. Vous avez beaucoup de problèmes de codage d'applescript dans votre code mais aucun d'entre eux ne cause votre problème. Applescript gère très bien le texte non-ascii. J'écris en danois parfois et ça marche. Cependant, lorsque j'ai essayé mon script en russe, j'ai obtenu les mêmes résultats que vous. Je ne peux pas expliquer pourquoi. Juste pour que vous puissiez voir la syntaxe correcte pour lire et écrire un fichier, voici mon code. Notez que je ne pas utiliser le Finder pour effectuer ces tâches et notez aussi comment je définir le chemin du fichier de sortie ...

set outpath to (path to desktop as text) & "danish.txt" 
set theText to "primær" 

-- write the file 
set openFile to open for access file outpath with write permission 
write theText to openFile 
close access openFile 

-- read the file 
set readText to read file outpath 

MISE À JOUR: J'ai trouvé une réponse à votre problème. Il semble que si vous écrivez la marque d'ordre des octets (BOM) utf-16 dans le fichier, cela fonctionne correctement pour le russe. En tant que tel, j'ai fait deux gestionnaires de sorte que vous pouvez lire et écrire ces fichiers ...

set filePath to (path to desktop as text) & "russian.txt" 
set theText to "Привет" 

write_UnicodeWithBOM(filePath, theText, true) 
read_UnicodeWithBOM(filePath) 

on write_UnicodeWithBOM(filePath, theText) 
    try 
     set openFile to open for access file (filePath as text) with write permission 
     write (ASCII character 254) & (ASCII character 255) to openFile starting at 0 
     write theText to openFile starting at eof as Unicode text 
    end try 
    try 
     close access openFile 
    end try 
end write_UnicodeWithBOM 

on read_UnicodeWithBOM(filePath) 
    read file (filePath as text) as Unicode text 
end read_UnicodeWithBOM 
+0

Merci. Cela a fonctionné comme un charme. Merci aussi de m'avoir montré la bonne syntaxe. Il est difficile de savoir si vous l'écrivez quand vous apprenez d'ici et d'ailleurs. Merci encore. – piercelayne

Questions connexes