Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: перекодировать текст ASCII в UTF-8
     
    
Добавлено: 27.02.08 15:38
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     bowfinger
 bowfinger
      
       
  
Кто подскажет. Как в VBA или с помощью Windows функций перекодировать текст ASCII в UTF-8 и наоборот?
 
    
Очень нужно!
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 7
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: Arseny
 Arseny


ICQ: 298826769 
Вопросов: 53
Ответов: 1732
      
 Профиль |  | #1
       
Добавлено:  27.02.08 18:03
       
    
       
  
вроде что-то было наподобие апи WideCharToMultiByte, или подобное.... не помню. Можешь воспользоваться левыми библиотеками: ConvertCyr, FastRecoder(http://www.wajim.fatal.ru/) или chilcat charset... Последний у меня на хомяке есть, но к нему надо лекарство искать, то, что есть, не прокатывает. Притом не знаю, как в вба со внешними либами....
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: el-paso
 el-paso


Вопросов: 3
Ответов: 164
      
 Профиль |  | #2
       
Добавлено:  27.02.08 21:31
       
    
       
  
Курите хелп по функции StrConv.
 
    
Она все перекодирует.
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: Sharp
 Sharp










Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #3
      
Добавлено:  27.02.08 22:13
       
    
       
  
Сначала MultiByteToWideChar с CP_ACP, чтобы перевести из ANSI в юникод. Затем WideCharToMultiByte c CP_UTF8, чтобы конвертнуть юникод в UTF-8.
 
    
Кроссплатформенный вариант: воспользоваться библиотекой iconv.
el-paso: ты уверен, что StrConv понимает UTF-8?
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: Winand
 Winand



Вопросов: 87
Ответов: 2795
      
 Web-сайт:  
 Профиль |  | #4
      
Добавлено:  27.02.08 23:38
       
    
       
  
Готовый модуль, не так давно нашел где-то в нете. Оч удобный.
 
    
Private Const CP_UTF8 = 65001
Private Const CP_ACP = 0
Private Declare Function GetACP Lib "Kernel32" () As Long
Private Declare Function WideCharToMultiByte Lib "Kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "Kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Function WToA(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
    Dim stBuffer As String
    Dim cwch As Long
    Dim pwz As Long
    Dim pwzBuffer As Long
    Dim lpUsedDefaultChar As Long
    
    If cpg = -1 Then cpg = GetACP()
    pwz = StrPtr(st)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, 0&, 0&, ByVal 0&, ByVal 0& 
    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer), ByVal 0&, ByVal 0& 
    WToA = Left$(stBuffer, cwch - 1)
End Function
Private Function AToW(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
    Dim stBuffer As String
    Dim cwch As Long
    Dim pwz As Long
    Dim pwzBuffer As Long
        
    If cpg = -1 Then cpg = GetACP()
    pwz = StrPtr(st)
    cwch = MultiByteToWideChar(cpg, lFlags, pwz, -1, 0&, 0& 
    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = MultiByteToWideChar(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer))
    AToW = Left$(stBuffer, cwch - 1)
End Function
Public Function EncodeUTF8(ByVal cnvUni As String) As String
    If cnvUni = vbNullString Then Exit Function
    EncodeUTF8 = StrConv(WToA(cnvUni, CP_UTF8), vbUnicode)
End Function
Public Function DecodeUTF8(ByVal cnvUni As String) As String
    If cnvUni = vbNullString Then Exit Function
     ecodeUTF8 = AToW(WToA(cnvUni, CP_ACP), CP_UTF8)
ecodeUTF8 = AToW(WToA(cnvUni, CP_ACP), CP_UTF8)
End Function
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: bowfinger
 bowfinger








Вопросов: 13
Ответов: 5
      
 Профиль |  | #5
       
Добавлено:  28.02.08 08:40
       
    
       
  
Спасибо всем за помощь. Winand дал самый лучший вариант
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: Winand
 Winand



Вопросов: 87
Ответов: 2795
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  28.02.08 18:11
       
    
       
  
это вроде откуда-то с плэнет-сорс-кода. Там даже что-то помню исправил, потому что строка возвращалась вдвое длиннее, чем должна была
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: Abiron
 Abiron







Вопросов: 30
Ответов: 62
      
 Профиль |  | #7
       
Добавлено:  29.07.08 11:58
       
    
       
  
А как перекодировать utf в windows?