通过 FTP 将 ANSI 字符串写入 Unicode 文件
我有以下 Visual Basic 6.0 函数,它通过 FTP 将 ANSI 字符串写入新文件。我希望它将文件写入 UTF-16LE。在以下方法中有什么好的方法可以做到这一点吗?
Public Sub writeToFile(ByVal FTPServer As String _
, ByVal userName As String _
, ByVal password As String _
, ByVal contents As String _
, ByVal destinationFile As String)
Dim hFile As Long
Dim lCount As Long
inetOpen
inetConnect FTPServer, userName, password
hFile = apiFtpOpenFile(m_hFTP, destinationFile, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 0&)
If hFile = 0 Then
Err.Raise EWMFTPErrorCodes.wmFTPSendError, , internetError
End If
If apiInternetWriteFile(hFile, contents, Len(contents), lCount) = 0 Then
Err.Raise EWMFTPErrorCodes.wmFTPSendError, , internetError
End If
apiInternetCloseHandle hFile
End Sub
我已经有大约 10 年没有使用 Visual Basic 6.0 了,所以我充其量只是摇摇欲坠。任何意见将不胜感激。
这是 apiInternetWriteFile 声明;
Private Declare Function apiInternetWriteFile Lib "wininet.dll" Alias "InternetWriteFile" ( _
ByVal hFile As Long _
, ByVal lpBuffer As String _
, ByVal dwNumberOfBytesToWrite As Long _
, ByRef lpdwNumberOfBytesWritten As Long) As Long
I have the following Visual Basic 6.0 function which writes an ANSI string to a new file over FTP. I would like it to write the file as UTF-16LE. Is there any good way to do that within this following method?
Public Sub writeToFile(ByVal FTPServer As String _
, ByVal userName As String _
, ByVal password As String _
, ByVal contents As String _
, ByVal destinationFile As String)
Dim hFile As Long
Dim lCount As Long
inetOpen
inetConnect FTPServer, userName, password
hFile = apiFtpOpenFile(m_hFTP, destinationFile, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 0&)
If hFile = 0 Then
Err.Raise EWMFTPErrorCodes.wmFTPSendError, , internetError
End If
If apiInternetWriteFile(hFile, contents, Len(contents), lCount) = 0 Then
Err.Raise EWMFTPErrorCodes.wmFTPSendError, , internetError
End If
apiInternetCloseHandle hFile
End Sub
I haven't done Visual Basic 6.0 in about 10 years, so I'm shaky at best. Any input would be greatly appreciated.
Here is the apiInternetWriteFile declaration;
Private Declare Function apiInternetWriteFile Lib "wininet.dll" Alias "InternetWriteFile" ( _
ByVal hFile As Long _
, ByVal lpBuffer As String _
, ByVal dwNumberOfBytesToWrite As Long _
, ByRef lpdwNumberOfBytesWritten As Long) As Long
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们需要查看 apiInternetWriteFile 的声明。我很确定这是 API 调用中的
Declare
,也许WinINet.dll 中的某些内容。我的猜测是,您需要:ByVal Long
来在开始时获取 BOM,尝试Contents = ChrW(&HFEFF&) &内容
。或者可能是FFEF
,不确定字节顺序。StrPtr(contents)
为第三个参数Len(contents)*2
(长度以字节为单位)这将传递一个 Unicode UTF-16 字符串作为内容论证
We need to see the declaration for apiInternetWriteFile. I'm pretty sure it's a
Declare
into an API call, maybe something in WinINet.dll. My guess is that you need to:ByVal Long
for the 2nd argumentContents = ChrW(&HFEFF&) & Contents
. Or possiblyFFEF
, not sure of the endianness.StrPtr(contents)
for the 2nd argumentLen(contents)*2
for the 3rd argument (length in bytes)That will pass a Unicode UTF-16 string as the contents argument