Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как с помощью JS изменить кодировку документа на utf-8 без bom ? (http://forum.oszone.net/showthread.php?t=269100)

dark-------13 01-10-2013 12:32 2226664

Как с помощью JS изменить кодировку документа на utf-8 без bom ?
 
Вложений: 1
Здравствуйте,
Подскажите пожалуйста, как с помощью JS изменить кодировку документа (test.txt) на utf-8 без bom ?
Есть скрипт ниже и еще один скрипт reload.js Файл 104819 который позволяет загружать данные в <div></div> из файла test.txt.
После того как в txt записывается русский текст и сохраняется документ обычным блокнотом - эти данные прочитать на html странице уже нельзя.
Код:

<html>
       
        <head>
                <script src="file://///server/site/reload.js"></script>
                <script>
                        var auto_refresh = setInterval(
                        function(){
                                $('#load_div').load('file://///server/site/test.txt');
                        }, 1);
                       
                       
                </script>
       
        </head>
        <body>

                <div id="load_div"></div>
        </body>
</html>

Вообще предполагается писать данные в test.txt вот таким скриптом
Код:

<html>
   
<head>

</head>
<body>

<script language="javascript">
function WriteToFile()
{
var fso, s, text;
var fso = new ActiveXObject('Scripting.FileSystemObject');
var s = fso.OpenTextFile('\\\\server\\site\\test.txt', 2, true, 0);
var text=document.getElementById("TextArea1").innerText;
s.WriteLine(text);
s.writeline("<br>");
<!-- s.WriteLine('***********************'); -->
s.Close();
}

</script>
<form name="abc">
<textarea name="text" ID="TextArea1"></textarea>
<button onclick="WriteToFile()">Click to save</Button> 
</form>
</body>



</html>


Iska 01-10-2013 12:39 2226670

dark-------13, зачем повтор?! Что непонятного было здесь?

dark-------13 01-10-2013 12:59 2226678

Цитата:

Цитата Iska
dark-------13, зачем повтор?! Что непонятного было здесь? »

Как на JS сохранить текст с формы в файл - с этим я разобрался.
Решил создать отдельную тему по перекодировке, т.к. предложенный вами вариант не работает.

Iska 01-10-2013 13:36 2226703

Цитата:

Цитата dark-------13
т.к. предложенный вами вариант не работает. »

Покажите код, который у Вас получился в итоге, и поясните, как именно «не работает».

dark-------13 01-10-2013 14:34 2226738

Исправил - добавив Dim UTFStream ошибки пропали , но кодировку не меняет в файле test.txt
После выполнения скрипта русский текст все равно не виден.

Код:

<html>
       
        <head>
                <script src="file://///server/site/reload.js"></script>
                <script>
                        var auto_refresh = setInterval(
                        function(){
                                $('#load_div').load('file://///server/site/test.txt');
                        }, 1);
                       
                       
                </script>
       
        </head>
        <body>
                Статичная инфа       
                <div id="load_div"></div>
                Статичная инфа       
        </body>
</html>




Делал так
Код:

Sub WriteUTF8WithoutBOM()
DIM fileLua
Set fileLua = CreateObject("adodb.stream")
fileLua.Type = 2
fileLua.Mode = 3
fileLua.Charset = "UTF-8"
fileLua.Open
fileLua.WriteText("\\server\site\test.txt")
fileLua.SaveToFile("\\server\site\test.txt")
fileLua.flush
fileLua.Close
End Sub

и так
Код:

Sub WriteUTF8WithoutBOM()
    Dim UTFStream
    Set UTFStream = CreateObject("adodb.stream")
    UTFStream.Type = adTypeText
    UTFStream.Mode = adModeReadWrite
    UTFStream.Charset = "UTF-8"
    UTFStream.LineSeparator = adLF
    UTFStream.Open
    UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
    UTFStream.WriteText "First set of special characters: oaanuuu€", adWriteLine
    UTFStream.WriteText "Second set of special characters: qwertzuiopouasdfghjkleauyxcvbnm\|A€I??a??[]i??;?¤>#&@{}<;>*~?^?°?`y????0", adWriteLine

    UTFStream.Position = 3 '3 skip BOM

    Dim BinaryStream
    Set BinaryStream = CreateObject("adodb.stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Mode = adModeReadWrite
    BinaryStream.Open

    'Strips BOM (first 3 bytes)
    UTFStream.CopyTo BinaryStream

    'UTFStream.SaveToFile "d:\adodb-stream1.txt", adSaveCreateOverWrite
    UTFStream.Flush
    UTFStream.Close

    BinaryStream.SaveToFile "\\server\site\test.txt", adSaveCreateOverWrite
    BinaryStream.Flush
    BinaryStream.Close
End Sub


Iska 01-10-2013 18:04 2226876

Цитата:

Цитата dark-------13
Делал так »

И что Вы пишете в поток:
Код:

fileLua.WriteText("\\server\site\test.txt")
?! Текст «\\server\site\test.txt». Не содержимое указанного файла, а банальную строку, буквально — «\\server\site\test.txt».

Цитата:

Цитата dark-------13
и так »

Аналогично:
Код:

    UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
    UTFStream.WriteText "First set of special characters: oaanuuu€", adWriteLine
    UTFStream.WriteText "Second set of special characters: qwertzuiopouasdfghjkleauyxcvbnm\|A€I??a??[]i??;?¤>#&@{}<;>*~?^?°?`y????0", adWriteLine

Вам надо писать своё содержимое, то, что у Вас в:
Код:

var text=document.getElementById("TextArea1").innerText;
s.WriteLine(text);
s.writeline("<br>");

Не используйте слепо копипаст с кода по приведённой ссылке. Подите в MSDN, почитайте документацию по ADODB.Stream. Поэкспериментируйте. Многое станет понятнее.

dark-------13 13-10-2013 10:15 2233534

Вот скрипт который должен удалить bom из файла, но он почему-то не работает
Код:

<script language="VBScript">
' Removes the Byte Order Mark - BOM from a text file with UTF-8 encoding
' The BOM defines that the file was stored with an UTF-8 encoding.
Call RemoveBOM(filePath)
Public function RemoveBOM(filePath)
     
        ' Create a reader and a writer
                Dim writer,reader, fileSize
                Set writer = CreateObject('Adodb.Stream')
                Set reader = CreateObject('Adodb.Stream')
                'from the text file we just wrote
                reader.Open
                reader.LoadFromFile ('c:\test\1.txt')
     
        ' Copy all data from reader to writer, except the BOM
                writer.Mode=3
                writer.Type=1
                writer.Open
                reader.position=5
                reader.copyto writer,-1

        ' Overwrite file
                writer.SaveToFile ('c:\test\1.txt',8)
     
        ' Return file name
                RemoveBOM = ('c:\test\1.txt')
        ' Kill objects
                Set writer = Nothing
                Set reader = Nothing

end Function
</script>


dark-------13 16-10-2013 07:59 2235284

Вот еще один скрипт и он тоже не решил проблему перекодировки
Код:

Public function RemoveBOM(filePath)
  Dim writer,reader, fileSize
  Set writer = CreateObject("Adodb.Stream")
  Set reader = CreateObject("Adodb.Stream")
  reader.Open
  reader.LoadFromFile filePath
  writer.Mode=3
  writer.Type=1
  writer.Open
  reader.position=3
  reader.copyto writer,-1
  writer.SaveToFile filePath,2
  RemoveBOM = filePath
  Set writer = Nothing
  Set reader = Nothing
end Function
Set objArgs = WScript.Arguments
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(objArgs(0))
Set colFiles = objFolder.Files
For Each objFile in colFiles
  RemoveBOM(objArgs(0) + "\" + objFile.Name)
Next
WScript.Echo "Ok"



Время: 07:57.

Время: 07:57.
© OSzone.net 2001-