现象:

从linux中通过sh生成一个csv文件,该文件的格式是utf-8,(我的操作系统为日文XP,文字编码为shift_jis)

⇒用excel直接打开,文件乱码。

⇒在access中使用原来的文件读取方式,不能正确读取。

调查:

----------------------------------------------------------------------------------

原先的读取方式为:

’注意1:要使用FileSystemObject,需要在[参照设定]中添加[microsoft excel 11.0

object library]

Dim fso

As New FileSystemObject

Dim f1 As

File

Dim ts As

TextStream

Set f1 =

fso.GetFile(filePath)

Set ts =

f1.OpenAsTextStream(ForReading)

'↓↓↓↓↓也可以用OpenTextFile的方式-↓↓↓↓↓

'Dim stmFile

'Dim strText As String

'Set stmFile = fso.OpenTextFile(filePath, ForReading, False)

'…

'strText = stmFile.ReadLine

'…

'stmFile.Close

'↑↑↑↑↑也可以用OpenTextFile的方式↑↑↑↑↑

Do Until

ts.AtEndOfStream

lineBuffer = ts.ReadLine

columnData = Split(lineBuffer, ",")

Loop

ts.Close

Set ts =

Nothing

Set f1 =

Nothing

Set fso =

Nothing

’注意2:其实在使用FileSystemObject作为打开文件处理之前,使用的是下面的文件读取方式(Line Input

)。这种方式,在文件的改行code为"CRLF"的时候没有问题,但是区别不了"LF"改行code,所以预想的是行读取变成了整个文件读取。使用FileSystemObject就可以解决。

********************************************

'Dim

fileNo As Long

'Open

filePath For Input Access Read Lock Write As #fileNo

' Do Until EOF(fileNo)

' Line Input #fileNo, lineBuffer

'    columnData = Split(lineBuffer, ",")

'    …

' Loop

'Close

#fileNo

********************************************

----------------------------------------------------------------------------------

解决方案1. 下载免费的转换工具进行转。

解决方案2. 通过access的[外部数据读入],在其中的某一步骤的时候,可以设置import定义体的读取格式(本例的案例就可以设为utf-8),然后保存到某个数据表中。

解决方案3.使用原先的文件读取方式+

使用[ADODB.Stream]:

(注意:这是网上说的较多的方案,但我实际检验之后发现并不能完全转换。写在这里权当参考)

(注意:使用[ADODB.Stream],需要在[参照设定]中添加[microsoft activex

data object 2.5

library]以上版本)

’对上面的文件读取方式取得的每一行数据进行变换

lineBuffer = tran_ado(lineBuffer, "utf-8",

"shift_jis")

’转换函数

Function tran_ado(ByVal strA As String, _

Optional ByVal strInCode As String = "utf-8", _

Optional ByVal strOutCode As String = "Shift-JIS") As String

' Microsoft ActiveX Data Objects 2.5 Library

Dim Stm

As New

ADODB.Stream Stm.Type =

adTypeText

Stm.Mode =

adModeUnknown

Stm.Open

Stm.Charset

= strOutCode

Stm.WriteText strA

Stm.Position

= 0

Stm.Type =

adTypeText

Stm.Charset

= strInCode

tran_ado =

Stm.ReadText()

Stm.Close

End Function

解决方案4(本例的最终解决方案).下记的文件读取方式 +

使用[ADODB.Stream]:

Dim ts As

ADODB.Stream Set ts = New

ADODB.Stream ts.Type = adTypeText

ts.Charset = "UTF-8"

'改行code根据文件而定

ts.LineSeparator = adLF

ts.Open

'文件装载

ts.LoadFromFile

(filePath) Do While Not (ts.EOS)

'行读取:ReadText(adReadLine)

'全文件读取:ReadText(adReadAll) lineBuffer = ts.ReadText(adReadLine)

Loop

■事例

Sub readLogfile(ByVal Target As Range)

Dim

iFileName As String

Dim

ts As ADODB.Stream '★【ツール\参照設定】で【microsoft activex data object 2.5

library】バージョン以上追加設定要

Dim

lineBuffer As String

Dim

userIdDic As

Dictionary '★【ツール\参照設定】で【microsoft Scripting runtime】バージョン以上追加設定要

Dim

lvArr As Variant

Dim

lsReadDate As String

Dim

iPrtRow As Long

'対象日付を読込

lsReadDate =

Cells(Target.Row + 1,

Target.Column) 'ユーザID出力開始行

iPrtRow =

Target.Row +

3 iFileName =

Application.GetOpenFilename

If iFileName

= "False" Then

'MsgBox "読込対象ログファイルを選択してください。"

Else

wz = InStrRev(iFileName, "\")

Path = Left(iFileName, wz)

fname = Right(iFileName, Len(iFileName) - wz)

'MsgBox "読込対象:" & fname & vbCrLf & "パス:" & Path

'---------読込開始-----------

Set ts = New ADODB.Stream

ts.Type =

adTypeText '★文字コードによって設定

ts.Charset = "UTF-8"

ts.LineSeparator =

adLF '★改行コードによって設定

ts.Open

'ファイルロード

ts.LoadFromFile (iFileName)

Do While Not (ts.EOS)

'行読込:ReadText(adReadLine)

'全文読込:ReadText(adReadAll)

lineBuffer = ts.ReadText(adReadLine)

If (IsNull(lineBuffer) Or IsEmpty(lineBuffer) Or lineBuffer = "")

Then

Else

lvArr = Split(lineBuffer, ",")

If (UBound(lvArr) > 5) Then

If (lvArr(1) = lsReadDate) Then

'重複なしのユーザIDの格納

vba去oracle数据后乱码,vba中读取utf-8文件乱码问题相关推荐

  1. oracle 导入电子表格,oracle数据导入到电子表格中

    oracle数据导入到excel中 实现步骤: 1.连入SQL*Plus 以system/manager用户登录, SQL> conn system/manager 创建新的用户:如user1/ ...

  2. 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...

    从项目目录中读取SQL查询文件(Read SQL query file from project directory) 我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中 ...

  3. sublime python3中读取和写入文件时如何解决编码问题

    sublime python3中读取和写入文件时如何解决编码问题 参考文章: (1)sublime python3中读取和写入文件时如何解决编码问题 (2)https://www.cnblogs.co ...

  4. C#中读取流媒体视频文件转H.264具体实现方法

    现在有越来越多的人在使用C#语言做编程,但我发现好像用C#做音视频流媒体开发的比较少.我们的libEasyScreenLive目前支持Windows,Android平台,通过EasyScreenLiv ...

  5. python爬去网页数据并对比excel中数据是否一致_python入门之对比两份excel表格数据...

    今天老大交给我一个任务,对比两个版本的excel数据的异同(增删情况),唉,说多了都是泪,自从学会了python,再也不用担心老大这样的任务了~~~ 好了直接上代码吧,代码中解释 import xlr ...

  6. mysql 删除数据后myd_Windows下的MySQL删除data文件夹后……

    MySQL删除data文件夹后,怎么都无法启动了,出现错误: 150106 9:28:43 [Note] Plugin 'FEDERATED' is disabled. wampmysqld: Tab ...

  7. mysql无法打开excel_关于Navicat将Excel数据导入到MySQL中出现无法打开文件错误

    一.起因:关于Navicat将Excel中的数据导入到数据库中,出现无法打开文件问题 最近想通过navicat ,将excel文件(xlsx格式)导入到数据库中,按照导入向导一步步操作,出现无法打开文 ...

  8. java excel 中文乱码_java中读取excel文件中字符串乱码问题解决方法

    以前的时候发现直接java读取一个excel文件输出里面的字符串会乱码,中文字符不会乱码,但是遇到英文的时候输出会乱码.这个问题太奇怪了. 我的表格名字为Shirley.xls. 我曾经直接读取exc ...

  9. gdal在java环境中读取mif/mid文件以及写入数据

    目录 1.maven项目搭建的gdal环境 2.maven项目搭建后开始代码 3.怎么提取两个Layer中某个字段相同的所有数据(这个并非是取属性交集)? 1.maven项目搭建的gdal环境 引入g ...

最新文章

  1. Oracle控制文件的重建
  2. 河南省计算机大学应用水平考试,河南省大学计算机等级考试选择题(文管二级)...
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先
  4. Linux系统7z文件解压
  5. mysql 语句检查_mysql查询语句
  6. 多个redistemplate_Spring boot 使用多个RedisTemplate
  7. vs 2005 多語言
  8. 疯狂的程序员 21-30
  9. 获取 Adobe Creative Cloud 2023 创意应用软件,解锁无限创造力
  10. CGLIB动态代理使用介绍
  11. Keil安装(带安装软件)
  12. 企业微信的一周小结是怎么统计的?
  13. 基于视觉的移动平台运动目标检测
  14. 积分上限函数的导数例题 笔记
  15. 抖音超火的动态图如何做 怎么制作GIF
  16. 手机端富文本编辑器_在手机上也能高效写作,这款好用的移动端编辑器值得你尝试...
  17. ios底部栏设计规范_设计干货:底部导航栏规范设计总结
  18. 明德文理学院的计算机,今日迎来全球计算机强校CMU卡耐基梅隆,多少中国学生获得青睐?...
  19. 读书笔记—YES!产品经理(上册)
  20. 大型智慧灌区信息化管理系统云平台 智慧灌区信息化管理系统解决方案

热门文章

  1. ListBox滚动条置底
  2. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec...
  3. sqlmap 常用操作
  4. SQLite第三课 源码编译错误以及解决
  5. 分布式团队面临的五大问题及解决办法
  6. JVM内存回收算法简述
  7. 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
  8. gtkorphan清理孤立软件包
  9. FVF的D3DFVF_XYZ和D3DFVF_XYZRHW的区别
  10. 在ubuntu16.0403X64上安装海思交叉编译工具链