traductor significado serbio ruso rusa historia glagolítico español escritura cirílico cirilico antiguo alfabeto unicode outlook outlook-vba

unicode - significado - ¿Cómo puedo determinar si el texto está en caracteres cirílicos?



cirilico significado (3)

Mi carpeta de correo no deseado se ha estado llenando de mensajes compuestos en lo que parece ser el alfabeto cirílico. Si el cuerpo de un mensaje o un asunto del mensaje está en cirílico, quiero eliminarlo permanentemente.

En mi pantalla veo caracteres cirílicos, pero cuando repito los mensajes en VBA dentro de Outlook, la propiedad "Asunto" del mensaje arroja signos de interrogación.

¿Cómo puedo determinar si el tema del mensaje está en caracteres cirílicos?

(Nota: he examinado la propiedad "InternetCodepage"; por lo general, es de Europa occidental).


la propiedad "Asunto" del mensaje arroja un montón de signos de interrogación.

Un problema clásico de codificación de cadenas. Parece que esa propiedad está devolviendo ASCII pero quieres UTF-8 o Unicode.


Me parece que ya tiene una solución fácil: simplemente busque cualquier línea de asunto con (por ejemplo) 5 signos de interrogación en ella


El tipo de datos String en VB / VBA puede manejar caracteres Unicode, pero el IDE tiene problemas para mostrarlos (de ahí los signos de interrogación).

Escribí una función IsCyrillic que podría ayudarte. La función toma un solo argumento de String y devuelve True si la cadena contiene al menos un carácter cirílico. Probé este código con Outlook 2007 y parece funcionar bien. Para probarlo, me envié algunos correos electrónicos con texto cirílico en la línea de asunto y verifiqué que el código de mi prueba podía seleccionar correctamente esos correos de entre todos los demás en mi Bandeja de entrada.

Entonces, en realidad tengo dos fragmentos de código:

  • El código que contiene la función IsCyrillic . Esto se puede copiar y pegar en un nuevo módulo de VBA o agregar al código que ya tiene.
  • La rutina de Test que escribí (en Outlook VBA) para probar que el código realmente funciona. Demuestra cómo usar la función IsCyrillic .

El código

Option Explicit Public Const errInvalidArgument = 5 '' Returns True if sText contains at least one Cyrillic character'' '' NOTE: Assumes UTF-16 encoding'' Public Function IsCyrillic(ByVal sText As String) As Boolean Dim i As Long '' Loop through each char. If we hit a Cryrillic char, return True.'' For i = 1 To Len(sText) If IsCharCyrillic(Mid(sText, i, 1)) Then IsCyrillic = True Exit Function End If Next End Function '' Returns True if the given character is part of the Cyrillic alphabet'' '' NOTE: Assumes UTF-16 encoding'' Private Function IsCharCyrillic(ByVal sChar As String) As Boolean '' According to the first few Google pages I found, '' '' Cyrillic is stored at U+400-U+52f '' Const CYRILLIC_START As Integer = &H400 Const CYRILLIC_END As Integer = &H52F '' A (valid) single Unicode char will be two bytes long'' If LenB(sChar) <> 2 Then Err.Raise errInvalidArgument, _ "IsCharCyrillic", _ "sChar must be a single Unicode character" End If '' Get Unicode value of character'' Dim nCharCode As Integer nCharCode = AscW(sChar) '' Is char code in the range of the Cyrillic characters?'' If (nCharCode >= CYRILLIC_START And nCharCode <= CYRILLIC_END) Then IsCharCyrillic = True End If End Function


Ejemplo de uso

'' On my box, this code iterates through my Inbox. On your machine,'' '' you may have to switch to your Inbox in Outlook before running this code.'' '' I placed this code in `ThisOutlookSession` in the VBA editor. I called'' '' it in the Immediate window by typing `ThisOutlookSession.TestIsCyrillic`'' Public Sub TestIsCyrillic() Dim oItem As Object Dim oMailItem As MailItem For Each oItem In ThisOutlookSession.ActiveExplorer.CurrentFolder.Items If TypeOf oItem Is MailItem Then Set oMailItem = oItem If IsCyrillic(oMailItem.Subject) Then '' I just printed out the offending subject line '' '' (it will display as ? marks, but I just '' '' wanted to see it output something) '' '' In your case, you could change this line to: '' '' '' '' oMailItem.Delete '' '' '' '' to actually delete the message '' Debug.Print oMailItem.Subject End If End If Next End Sub