How to save a Unicode character to a text file

后端 未结 3 729
眼角桃花
眼角桃花 2020-12-20 02:22

This is in Word for MAC VBA. I want to save the Unicode character from a text box to text file. For example this character \"⅛\".

I use this code.

D         


        
相关标签:
3条回答
  • 2020-12-20 02:26

    The question is for VBA on Mac, and I'm afraid none of the answers work on a Mac.

    The question is about Unicode which comes in many flavours. I'll address the UTF-16 aspect of it. UTF-8 follows a different path, but it isn't difficult too. AFAIU, your question is about UTF-16 string.

    The code below has no error handling, I'll let you take care of that.

    Function writeUnicodeTextToFile(filePathName As String, myText As String)
    
    `Dim myFileNumber As Long, I As Long, byteArray() As Byte
    
    myFileNumber = FreeFile()
    Open filePathName For Binary As #myFileNumber
    
    ReDim byteArray(1)
    
    ' Create a BOM for your Unicode flavour
    ' (CHOOSE! one of the two, programmatically, or hard-code it)
     ' => Little Endian
        byteArray(0) = 255: byteArray(1) = 254
    ' => Big Endian
        'byteArray(0) = 254: byteArray(1) = 255
    
    ' now write the two-byte BOM
    Put myFileNumber, 1, byteArray
    
    ' redimension your byte array
    ' note it works even if you don't Redim (go figure) but it's more elegant
    I = (LenB(myText) / 2) - 1
    ReDim byteArray(I)
    
    ' populate the byte array...
    byteArray = myText
    
    ' ... and write you text AFTER the BOM
    Put myFileNumber, 3, byteArray
    Close #myFileNumber
    End Function
    
    0 讨论(0)
  • 2020-12-20 02:38

    I hope this will fit VBA for Word on Mac as well, but on Windows I have the CreateTextFile method of the FileSystemObject (see MSDN doc). There I can define to create a unicode text file.

      Set fsObject = CreateObject("Scripting.FileSystemObject")
      Set xmlFile = fsObject.CreateTextFile("path/filename.txt", True, True) 'the second "true" forces a unicode file.
    
      xmlFile.write "YourUnicodeTextHere"
      xmlFile.close
    
    0 讨论(0)
  • 2020-12-20 02:46

    VBA can't code text in UTF-8 this way. Use ADODB - yes, for text, not for database.

    'ensure reference is set to Microsoft ActiveX DataObjects library
    '(the latest version of it) under "tools/references"
    Sub AdoTest()
        Dim adoStream As ADODB.Stream
    
        Set adoStream = New ADODB.Stream
    
        'Unicode coding
        adoStream.Charset = "Unicode" 'or any string listed in registry HKEY_CLASSES_ROOT\MIME\Database\Charset
    
        'open sream
        adoStream.Open
    
        'write a text
        adoStream.WriteText "Text for testing: ěšč", StreamWriteEnum.stWriteLine
    
        'save to file
        adoStream.SaveToFile "D:\a\ado.txt"
    
        adoStream.Close
    End Sub
    

    Reading is simplier, see my answer here:

    Unicode and UTF-8 with VBA

    Edited: I've inserted complete example.

    Edited 2: Added refernce to list of coding in the registry

    0 讨论(0)
提交回复
热议问题