Войти

Показать полную графическую версию : Как с помощью JS изменить кодировку документа на utf-8 без bom ?


dark-------13
01-10-2013, 12:32
Здравствуйте,
Подскажите пожалуйста, как с помощью 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
dark-------13, зачем повтор?! Что непонятного было здесь (http://forum.oszone.net/post-2226446.html#post2226446)?

dark-------13
01-10-2013, 12:59
dark-------13, зачем повтор?! Что непонятного было здесь? »
Как на JS сохранить текст с формы в файл - с этим я разобрался.
Решил создать отдельную тему по перекодировке, т.к. предложенный вами вариант не работает.

Iska
01-10-2013, 13:36
т.к. предложенный вами вариант не работает. »
Покажите код, который у Вас получился в итоге, и поясните, как именно «не работает».

dark-------13
01-10-2013, 14:34
Исправил - добавив 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
Делал так »
И что Вы пишете в поток:
fileLua.WriteText("\\server\site\test.txt")
?! Текст «\\server\site\test.txt». Не содержимое указанного файла, а банальную строку, буквально — «\\server\site\test.txt».

и так »
Аналогично:
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
Вот скрипт который должен удалить 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
Вот еще один скрипт и он тоже не решил проблему перекодировки
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"




© OSzone.net 2001-2012