Отправка входного файла из Excel VBA в Raspberry Pi без изменения содержимого

1

Я отправляю текстовый файл из своего Excel в малину Pi, где Pi будет читать этот файл и получать вход внутри. Вход представляет собой только одну строку, и это простое число и ничего больше (40,38 и т.д.),

Когда я запускаю этот макрос, я могу видеть входной файл на моем ПК отлично, но когда я его открываю внутри Pi, он изменяется, например:

Входной файл на моем ПК:

65

Входной файл в малине:

ÿþ6

Как я могу убедиться, что этот номер отправлен на Pi так же, как и он. Или как мне декодировать это на что-то, что может понять мой скрипт python. Я не буду использовать десятичные числа с этим номером, и не имеет значения, отправлен ли он как строка, поскольку я могу проанализировать его позже в моем коде python.

Ниже мой макрос Excel

Sub Send()

    Dim sleeptime As String
    sleeptime = InputBox("Duration between each reading in seconds?")

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile("C:\Users\xx\Desktop\VBA\input.txt", True, True)
    Fileout.Write sleeptime
    Fileout.Close
    Set fso = Nothing
    Set Fileout = Nothing


    Const cstrSftp As String = """C:\Program Files\PuTTY\pscp.exe"""
    Dim strCommand As String
    Dim pUser As String
    Dim pPass As String
    Dim pHost As String
    Dim pFile As String
    Dim pRemotePath As String

    pUser = "pi" '//user on remote system
    pPass = "xx" '//user password on remote system
    pHost = "192.168.x.xx" '//ip address of remote system
    pFile = "C:\Users\xx\Desktop\VBA\input.txt" '//file to transfer
    pRemotePath = "/home/pi/Temp_Codes" '//directory where file will be transferred to

    strCommand = cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & _
        " " & pFile & " " & pHost & ":" & pRemotePath
    Debug.Print strCommand
    Shell strCommand, 0 ' vbHide

End Sub

И это строки внутри скрипта моей малины Pi, где я использую этот входной файл. Позже я использую это значение сдержанности внутри time.sep.

with open('input.txt', 'r') as myfile:
    sleeptime = myfile.read()

sleeptime = float(sleeptime.strip())

Вот простой код, который я запускаю, чтобы проверить эту кодировку:

#!/usr/bin/env python

import io

with io.open('input.txt', 'r', encoding='utf-8-sig') as myfile:
    sleeptime = myfile.read()

sleeptime = float(sleeptime.strip())

Это ошибка, которую я до сих пор получаю.

pi@raspberrypi:~/Temp_Codes $ python try.py
Traceback (most recent call last):
  File "try.py", line 6, in <module>
    sleeptime = myfile.read()
  File "/usr/lib/python2.7/codecs.py", line 314, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
  File "/usr/lib/python2.7/encodings/utf_8_sig.py", line 66, in _buffer_decode
    return codecs.utf_8_decode(input, errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
Теги:
excel
raspberry-pi
pscp

1 ответ

1
Лучший ответ

Когда Excel/VBA создает файл Unicode через "CreateTextFile", он сохраняет его в кодировке UTF-16. То, что вы видите, - это спецификация (байтовый порядок байтов).

Вы можете изменить

CreateTextFile("C:\Users\xx\Desktop\VBA\input.txt", True, True)

в

CreateTextFile("C:\Users\xx\Desktop\VBA\input.txt", True, False)

Это будет сохраняться как текстовый файл ASCII. Или вы можете внести изменения на стороне Pi/Python, используя

open('input.txt', 'r', encoding='utf-16')
  • 0
    Я только что отредактировал свой пост и добавил строки в свой скрипт на Python, где я открываю этот файл, как с этим работает кодировка?
  • 0
    Измените "open ('input.txt', 'r')" на "open ('input.txt', 'r', encoding = 'utf-8-sig')"
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню